有人能解释一下这行代码的含义吗?我之前见过(nonatomic,retain),但是第一次看到"assign"关键字在这里:
@property (nonatomic, assign) id <IconDownloaderDelegate> delegate;
感谢你的帮助,
斯蒂芬
基于Peter的回答:
当您创建属性时,可以使用@synthesize
指令自动创建getter和setter方法。编译器不仅创建两个方法
- (id) delegate;
- (void) setDelegate: (id) newDelegate;
此外,它还会在此处添加额外代码以防止多个线程同时更改属性(实质上是锁定)。nonatomic
告诉编译器代码不需要是线程安全的,这意味着更少的代码和更好的性能。
使用 retain
创建的编译器 setter 会类似于以下内容:
- (void) setDelegate: (id) newDelegate {
if (delegate != newDelegate) {
[delegate release];
delegate = [newDelegate retain];
}
}
这就是为什么你需要在类的dealloc
方法中释放保留的属性。
由于一般建议不要保留委托对象,所以你应该使用assign
而不是retain
,setter方法应该像这样:
- (void) setDelegate: (id) newDelegate {
if (delegate != newDelegate) {
delegate = newDelegate;
}
}
Assign 是一种简单的赋值操作,类似于 int x = y,不涉及内存管理(例如 retain)。