lgd*_*dev 12 objective-c automatic-ref-counting
我使用Xcode 4.3中的"Convert to Objective C ARC"选项将Xcode 4.0中启动的项目转换为使用ARC.在修复该工具发现的错误之后,我进入了迁移工具已删除所有发布消息以及在我的属性声明中保留属性的过程.所以现在我的所有属性都只有(非原子)属性.通过阅读文档,我仍然没有明确的答案.
所以我的问题是:如果在属性声明中省略了关于setter语义的关键字(strong,weak,retain,assign),使用ARC时属性的默认属性是什么?
我在文档中发现默认属性属性是assign.但是,他们还说现在ivars的默认属性,如果省略它,就很强大.
为了更好地解释我的问题,这是一个例子.我头文件我们有声明:
@property (nonatomic) MyClass *objectToUse;
Run Code Online (Sandbox Code Playgroud)
在我们的实施中,我们只有
@synthesize objectToUse;
Run Code Online (Sandbox Code Playgroud)
如果我们在内部写一些方法:
self.objectToUse = [[MyClass alloc] init];
Run Code Online (Sandbox Code Playgroud)
我们创建了一个强大的(保留)或弱(分配)参考?如果我们改写
objectToUse = [[MyClass alloc] init];
Run Code Online (Sandbox Code Playgroud)
通过使用ivar,我们改变了有关对象保留政策的情况吗?在我看来,现在使用ARC,使用属性进行内存管理的最佳实践不再是相同的做法.
默认关系类型仍然是assign,即弱参考.此外,在ARC模式下,@synthesize除非您明确指定关系类型,否则编译器将在访问器时生成错误.
分配给self.objectToUse和之间的区别objectToUse是第二个表单将始终使用ARC retain或assign,copy如果您指定了一个copy关系,将使用第一个表单.
| 归档时间: |
|
| 查看次数: |
1872 次 |
| 最近记录: |