谁能解释一下这条线的含义?我用来看(非原子,保留)它是我第一次看到"assign"关键字:
@property (nonatomic, assign) id <IconDownloaderDelegate> delegate;
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助,
斯特凡
以彼得的答案为基础:
创建属性时,可以使用该@synthesize指令自动创建getter和setter方法.编译器不仅创建两个方法
- (id) delegate;
- (void) setDelegate: (id) newDelegate;
Run Code Online (Sandbox Code Playgroud)
但也要在此周围添加额外的代码以防止多个线程同时更改属性(本质上是一个锁). nonatomic告诉编译器代码不需要是线程安全的,这意味着更少的代码和更好的性能.
编译器创建的setter retain看起来像这样:
- (void) setDelegate: (id) newDelegate {
if (delegate != newDelegate) {
[delegate release];
delegate = [newDelegate retain];
}
}
Run Code Online (Sandbox Code Playgroud)
这就是为什么你需要在dealloc你的类的方法中释放保留的属性.
由于一般建议是不保留您的委托,您使用assign而不是,retain而setter将如下所示:
- (void) setDelegate: (id) newDelegate {
if (delegate != newDelegate) {
delegate = newDelegate;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4774 次 |
| 最近记录: |