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

Ste*_*eve 3 iphone ios4 ios

谁能解释一下这条线的含义?我用来看(非原子,保留)它是我第一次看到"assign"关键字:

@property (nonatomic, assign) id <IconDownloaderDelegate> delegate;
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助,

斯特凡

Mag*_*ave 8

以彼得的答案为基础:

创建属性时,可以使用该@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)