任何人都可以解释我这句话是什么意思吗?我曾经看到(非原子的,保留的)这是我第一次看到“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/

10-08 20:59