emf*_*rry 123 objective-c ios automatic-ref-counting
我正在尝试学习iOS 5中的自动引用计数.现在这个问题的第一部分应该很简单:
它是正确的,我不使用ARC时需要写在我的dealloc明确释放属性声明?换句话说,这是真的,以下就不是需要一个明确的dealloc的?
@interface MyClass : NSObject
@property (strong, nonatomic) NSObject* myProperty;
@end
@implementation MyClass
@synthesize myProperty;
@end
Run Code Online (Sandbox Code Playgroud)我的下一个也是更重要的问题来自" 转换为ARC发行说明"文档中的一行:
您不必(实际上不能)释放实例变量,但您可能需要在系统类和其他未使用ARC编译的代码上调用[self setDelegate:nil].
这引出了一个问题:我怎么知道哪些系统类没有用ARC编译?我什么时候应该创建自己的dealloc并明确地将强保留属性设置为nil?我应该假设属性中使用的所有NS和UI框架类都需要显式的deallocs吗?
在使用手动参考跟踪时,有关SO和其他地方有关释放财产支持ivar的做法的大量信息,但在使用ARC时相对较少.
Lil*_*ard 197
简短回答:不,你不必dealloc
在ARC下输掉属性.
答案很长:dealloc
即使在手动内存管理中,也不应该忽略属性.
在MRR中,您应该释放您的ivars.Nilling out属性意味着调用setter,它可以调用它不应该触及的代码dealloc
(例如,如果你的类或子类覆盖setter).同样,它可能会触发KVO通知.释放ivar反而避免了这些不良行为.
在ARC中,系统会自动为您释放任何ivars,因此,如果这就是您所做的一切,您甚至不必实施dealloc
.但是,如果你有任何需要特殊处理的非对象ivars(例如你需要的分配缓冲区free()
),你仍然需要处理那些dealloc
.
此外,如果您将自己设置为任何对象的委托,则应该取消设置该关系dealloc
(这是关于调用的一点[obj setDelegate:nil]
).关于在未使用ARC编译的类上执行此操作的说明是对弱属性的认可.如果类明确标记其delegate
属性,weak
那么您不必执行此操作,因为弱属性的性质意味着它将为您填充.但是如果属性被标记,assign
那么你应该在你的内容dealloc
中将其清零,否则该类会留下一个悬空指针,如果它试图向其委托发送消息,它可能会崩溃.请注意,这仅适用于非保留关系,例如委托.
归档时间: |
|
查看次数: |
33035 次 |
最近记录: |