懒加载及self.和下划线区别
来源:互联网 发布:盗墓笔记坐骑进阶数据 编辑:程序博客网 时间:2024/06/10 17:17
0x00 懒加载
被声明为属性的成员,在ios5之前需要使用编译器指令@synthesize告诉编译器帮助生成属性的getter,setter方法。之后会默认生成。编译器在生成getter,setter方法时先检查有没有自定义getter,setter方法,如果有则使用自定义的,没有才生成。
懒加载就是重写属性的getter方法,然后加一个判断,为空则赋值,不为空则返回。代码如下:
@interface ViewController ()
@property (nonatomic, copy) NSString *mtest;
@end
@implementation ViewController
// 懒加载
-(NSString *)mtest {
if (_mtest == nil) {
_mtest = @"aaa";
}
return _mtest;
}
- (void)viewDidLoad {
[super viewDidLoad];
NSLog(@"%@", self.mtest);
}
@end
0x01 self.mtest和_mtest的区别
在第一次使用时由于没注意到两者的区别,在setter方法中调用self.mtest,结果导致了setter方法的循环调用。写法如下:
// 错误写法
-(NSString *)mtest {
if (self.mtest == nil) {
self.mtest = @"aaa";
}
return self.mtest;
}
导致原因是,self.mtest会调用属性的setter方法,触发懒加载,但是_mtest只是访问一个局部变量。
2 0
- 懒加载及self.和下划线区别
- self.和下划线的区别
- self.和_的区别(self和下划线的区别)
- self和下划线的用法区别
- ios self.和下划线的区别
- ios下划线和self中的区别
- self和下划线的用法区别
- iOS中self.和下划线的区别
- self和下划线的用法区别
- iOS中self.和下划线的区别
- iOS中self.和下划线的区别
- iOS中self和下划线的区别
- self调用属性和直接下划线调用属性的区别
- 关于self点操作访问和下划线访问的区别
- self点语法和下划线_的区别
- iOS中self.xxx 和 _xxx 下划线的区别
- iOS中self.xxx 和 _xxx 下划线的区别
- iOS中self.xxx 和 _xxx 下划线的区别
- 数据库的基本操作
- 运行时有多个版本的库文件怎么办?
- 各种数据结构的复杂度
- java jdk和eclipse的配置
- IOS 关于layoutSubviews摘记
- 懒加载及self.和下划线区别
- 加速计And摇一摇
- [转载]中文与乱码问题 及一些问题
- jQuery源码分析之offset,position,offsetParent方法以及源码中常见的cssHooks,swap代码
- 模拟器系统键盘 不能弹出
- C++中的iter_swap函数的应用
- Android夜间模式的实现
- self = [super init]理解
- hdu 1540 线段树区间合并