Objective-C属性 - 保留和分配之间的差异

Ami*_*mir 3 memory-management properties objective-c

我想我错过了一些关于属性属性的东西.首先,我不明白之间的差别retainassign.

如果我使用assign,属性是否将retain计数器增加1到setter和getter,我是否需要同时使用release它们?

以及如何做这项工作readwrite还是copy?从retain计数的角度来看.

我试图理解我在使用release属性(setter和getter)后需要使用的时间

@property (readwrite,assign) int iVar; 
Run Code Online (Sandbox Code Playgroud)

是什么assign在这里做?

有什么区别:

@property (readwrite,assign) int iVar;
Run Code Online (Sandbox Code Playgroud)

@property (readwrite,retain) int iVar;
Run Code Online (Sandbox Code Playgroud)

@property (readwrite) int iVar;
Run Code Online (Sandbox Code Playgroud)

非常感谢...

Jer*_*myP 11

有什么不同:@property(readwrite,assign)int iVar; 到@property(readwrite,retain)int iVar; 到@property(readwrite)int iVar;

setter for @property (readwrite,assign) sometype aProperty;在语义上等同于

-(void) setAProperty: (sometype) newValue
{
    ivar = newValue;
}
Run Code Online (Sandbox Code Playgroud)

如果放的话,上面的内容或多或少都会得到

@asynthesize aProperty = ivar;
Run Code Online (Sandbox Code Playgroud)

在你的实施中.

setter for @property (readwrite,retain) sometype aProperty;在语义上等同于

-(void) setAProperty: (sometype) newValue
{
    [newValue retain];
    [ivar release];
    ivar = newValue;
}
Run Code Online (Sandbox Code Playgroud)

显然,保留或释放int是没有意义的,因此某些类型必须是id或者SomeObjectiveCClass*

setter for @property (readwrite,copy) sometype aProperty;在语义上等同于

-(void) setAProperty: (sometype) newValue
{
    sometype aCopy = [newValue copy];
    [ivar release];
    ivar = aCopy;
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,不仅某些类型必须是一个客观的C类,而且它必须响应-copyWithZone:(或等效地,实现NSCopying).

如果省略保留或分配或复制,则默认为assign.

顺便说一句,我通过不考虑发生的锁定来简化上述内容,因为属性也没有指定nonatomic.