iOS ARC Property 总结

来源:互联网 发布:淘宝网茶具套装价格 编辑:程序博客网 时间:2024/05/21 13:54

由于一直活在旧时代,最近想在新的项目上使用ARC,看了几篇的文章后,稍微总结一下 Property。


在 MRC 时代,我们使用 Property 主要是简化实例对象的手动内存管理的成本,让 property 的 setter 方法自动管理原来对象的释放,以及新对象的 retain。但是有了 ARC 我们就不再需要了。一般来讲,如果仅仅只是在类中使用实例变量,你直接使用实例变量是更好的选择,内存管理就交给ARC就好了,只有那些属于 public 接口的实例变量,才应该定义为 property。

@interface MainViewController () @property (nonatomic, strong) NSMutableArray *searchResults;@end

很多时候我们会这样写 synthesize 语句:

@synthesize propertyName = _propertyName;
实际上_propertyName 实例变量甚至可以不定义,编译器会自动为 property 定义 "_*" 的实例变量。


在 ARC 中,所有 outlet 属性都推荐使用 weak,这些 view 对象已经属于 View Controller 的 view hierarchy,不需要再次定义为 strong(ARC 中效果等同于 retain)。

@interface MainViewController () @property (nonatomic, weak) IBOutlet UITableView *tableView;@end 
在使用ARC之前,我不管是外部使用还是仅在类中使用的实例变量,我都会把它写到interface中,有时为了方便偶而会加上 property(将实例变量写在头文件中是一种遗留的陋习)。更好方法就是把实例变量名字写在@implementation里,与类实现的关系更密切同时也能够隐藏细节。


我们可以直接在.m 类实现中定义 private 实例变量:

@implementation MainViewController {NSMutableString *currentStringValue;}

我们在使用时,虽然没有定义 property,也可以直接
[self.soundEffect play];

如果你觉得这很别扭,也可以使用
[[self soundEffect] play];
如果你还是觉得应该定义 property,那就定义一个吧,反正也没什么害处。

原创粉丝点击