self.属性
和_成员变量
基本区别就不细说了,这里主要谈论的是在子类继承中的问题. 在看此篇内容之前,先看一下文中图片部分内容.
一.初始化
- 1定义一个继承
UIView
的Father
类,- (UIView *)getRedView
返回的是self.red;
//Father.m
#import "Father.h"
@interface Father ()
@property (nonatomic, strong) UIView *red;
@end
@implementation Father
- (instancetype)init
{
self = [super init];
if (self) {
self.red = [UIView new];
}
return self;
}
- (UIView *)getRedView {
return self.red;
}
@end
- 2定义一个继承
Father
的Son
类
//Son.m
#import "Son.h"
@interface Son ()
@property (nonatomic, strong) UIView *red;
@end
@implementation Son
@end
/ /调用
Son *ss = [Son new];
NSLog(@"====%@",[ss getRedView]);有值//====<UIView: 0x7fa38a705c30; frame = (0 0; 0 0); layer = <CALayer: 0x600000e5d620>>
二.修改Father.m
中的方法,- (UIView *)getRedView
返回的是_red;
此时结果如下图
- (UIView *)getRedView {
return _red;
}
此时self.red有值而_red为nil
/ /调用
Son *ss = [Son new];
NSLog(@"====%@",[ss getRedView]);没有值//====(null)
三.一般在第三方库不满足需求的时候,我们会进行继承,重写方法,这个时候容易出现这个问题, 如果不知道这点, 很容易报错.
// 在Son.m文件中实现下面这个方法就可以解决,当然还有其他方法,大家可以自己测试
- (UIView *)getRedView {
return _red;
}
网友评论