@property(nonatomic,assign)id <icondownloaderdelegate> delegate; </icondownloaderdelegate>

时间:2011-09-11 15:04:21

标签: iphone ios ios4

任何人都可以解释一下这行是什么意思吗?我用它来看(非原子,保留)它是我第一次看到&#34;分配&#34;关键字:

@property (nonatomic, assign) id <IconDownloaderDelegate> delegate;

Thx求助,

的Stephane

3 个答案:

答案 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)。