任何人都可以解释我这句话是什么意思吗?我曾经看到(非原子的,保留的)这是我第一次看到“assign”关键字:
@property (nonatomic, assign) id <IconDownloaderDelegate> delegate;
谢谢您的帮助,
斯蒂芬
最佳答案
以彼得的答案为基础:
创建属性时,可以使用@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
,而设置方法将如下所示:- (void) setDelegate: (id) newDelegate {
if (delegate != newDelegate) {
delegate = newDelegate;
}
}
关于iphone - @property(非原子的,分配的)id <IconDownloaderDelegate>委托(delegate);,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7379086/