任何人都可以解释一下这行是什么意思吗?我用它来看(非原子,保留)它是我第一次看到"分配"关键字:
@property (nonatomic, assign) id <IconDownloaderDelegate> delegate;
Thx求助,
的Stephane
答案 0 :(得分:8)
以彼得的回答为基础:
创建属性时,可以使用@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;
}
}
答案 1 :(得分:2)
首先我想在这里解释一下,但我发现这个 link 并认为可能会很好地解释你的怀疑。
<强> assign 强>
指定setter使用简单赋值。此属性是默认属性。
您通常将此属性用于标量类型(如NSInteger和CGRect),或者(在引用计数环境中)用于您不拥有的对象,例如委托。
保留和分配在垃圾收集环境中实际上是相同的。
答案 2 :(得分:1)
Assign只是一个像int x = y这样的赋值,没有内存管理(比如keep)。