gpt4 book ai didi

objective-c - 是否需要释放 Objective-c 2.0 属性的内存?

转载 作者:太空狗 更新时间:2023-10-30 03:30:53 25 4
gpt4 key购买 nike

一段时间以来我一直想知道关于属性的事情。当您使用属性时,是否需要覆盖发布消息以确保属性是已发布的属性?

以下(虚构的)示例是否足够?

@interface MyList : NSObject {
NSString* operation;
NSString* link;
}
@property (retain) NSString* operation;
@property (retain) NSString* link;
@end

@implementation MyList
@synthesize operation,link;
@end

最佳答案

你应该总是释放 dealloc 中的支持变量:

- (void) dealloc {
[operation release];
[link release];

[super dealloc];
}

另一种方式:

- (void) dealloc {
self.operation = nil;
self.link = nil;

[super dealloc];
}

这不是释放对象的首选方式,但如果您使用合成后备变量,这是唯一的方式。

注意:为了弄清楚为什么会这样,让我们​​看一下 link 属性的 setter 的综合实现,以及当它被设置为 nil 时会发生什么:

- (void) setLink:(MyClass *) value {
[value retain]; // calls [nil retain], which does nothing
[link release]; // releases the backing variable (ivar)
link = value; // sets the backing variable (ivar) to nil
}

因此最终效果是它将释放 ivar。

关于objective-c - 是否需要释放 Objective-c 2.0 属性的内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1389162/

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