gpt4 book ai didi

Objective-C 属性 - 保留和分配之间的区别

转载 作者:搜寻专家 更新时间:2023-10-30 19:51:34 24 4
gpt4 key购买 nike

我想我遗漏了一些关于属性的信息。首先,我无法理解 retainassign 之间的区别。

如果我使用 assign,属性是否将 retain 计数器加 1 到 setter 和 getter,我是否需要使用 release 给他们两个?

这如何与 readwritecopy 一起工作?从 retain 的角度来看。

我试图了解在使用属性(setter 和 getter)后何时需要使用 release

@property (readwrite,assign) int iVar; 

assign 在这里做什么?

有什么区别:

@property (readwrite,assign) int iVar;

@property (readwrite,retain) int iVar;

@property (readwrite) int iVar;

非常感谢...

最佳答案

what is the different between : @property (readwrite,assign) int iVar; to @property (readwrite,retain) int iVar; to @property (readwrite) int iVar;

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

-(void) setAProperty: (sometype) newValue
{
ivar = newValue;
}

以上就是你投入的差不多了

@asynthesize aProperty = ivar;

在您的实现中。

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

-(void) setAProperty: (sometype) newValue
{
[newValue retain];
[ivar release];
ivar = newValue;
}

显然,保留或释放一个 int 是没有意义的,因此 sometype 必须是 idSomeObjectiveCClass*

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

-(void) setAProperty: (sometype) newValue
{
sometype aCopy = [newValue copy];
[ivar release];
ivar = aCopy;
}

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

如果省略 retain 或 assign 或 copy,则默认为 assign。

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

关于Objective-C 属性 - 保留和分配之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2989830/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com