gpt4 book ai didi

objective-c - 如何判断是否需要释放一个对象?

转载 作者:行者123 更新时间:2023-12-03 17:30:53 25 4
gpt4 key购买 nike

您能描述一下返回为调用者分配的对象(调用者应释放的对象)的方法与返回自动释放对象的方法之间的命名约定差异吗?

如果你声明一个带有retain属性的属性,在将它设置为nil之前是否需要释放该属性?

@synthesize 指令有什么作用?

最佳答案

来自apple documentation

You only release or autorelease objects you own. You take ownership of an object if you create it using a method whose name begins with “alloc” or “new” or contains “copy” (for example, alloc, newObject, or mutableCopy), or if you send it a retain message.

You use release or autorelease to relinquish ownership of an object. autorelease just means “send a release message in the future” (to understand when this will be, see “Autorelease Pools”).

你的后两个问题是相关的。 @synthesize 所做的只是为您的实现文件生成附加方法。 @property 的参数(非原子,保留) NSString* myString;定义生成方法的行为。例如,如果将属性声明为保留,则生成的 setMyString 方法将保留其参数。

非原子很重要,因为默认情况下属性是线程安全的。如果您不需要线程安全,则可以消除访问器方法中的大量开销。

最后,保留属性的实现是

- (void) setMyString:(NSString*)newString {
[newString retain];
[myString release];
myString = newString;
}

因此,说 self.myString = nil 可以有效地为您释放 myString。许多人主张使用 self.property = nil 来保留属性,而不是[属性释放],尽管我认为这只是个人喜好。

关于objective-c - 如何判断是否需要释放一个对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3945170/

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