关于使用 @property @synthesize 释放对象的问题

发布于 2024-11-30 03:00:27 字数 563 浏览 2 评论 0原文

我知道已经有人问过很多类似的问题,这就是为什么我犹豫是否要发布此问题,但我找不到任何可以准确回答我的问题的内容:

当我使用 @property@ Synthesize@synthesize 是否负责释放正在设置的对象的原始值?即,如果我有:

@interface SomeClass:NSObject
{
    NSObject *object;
}

@property (nonatomic, retain) NSObject *object;
@end

@implementation SomeClass
@synthesize object;
@end

这是否相当于获得一个如下所示的 setter 方法?

-(void)setObject:(NSObject *)newObject
{
[object release];
object = [newObject retain];
}

或者我是否必须以某种方式自行释放原始对象?

感谢您的澄清!

I know many similar questions have been asked, which is why I hesitated to post this at all, but I couldn't find anything that answered my question exactly:

When I use @property and @synthesize, does @synthesize take care of releasing the original value for the object being set? I.e. if I have:

@interface SomeClass:NSObject
{
    NSObject *object;
}

@property (nonatomic, retain) NSObject *object;
@end

@implementation SomeClass
@synthesize object;
@end

Is this equivalent to getting a setter method that looks like this?

-(void)setObject:(NSObject *)newObject
{
[object release];
object = [newObject retain];
}

Or do I have to somehow take care of releasing the original object myself?

Thanks for the clarification!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

扶醉桌前 2024-12-07 03:00:27

答案是肯定的。 Setter 和 getter 是为您生成的,并且做得很好,可以让您远离内存管理:

-(void)setObject:(NSObject *)newObject {
  if (object != newObject) {
    [object release];
    object = [newObject retain];
  }
}

要释放您的对象,您可以调用:

[self setObject:nil];

The answer is yes. Setter and getter are generated for you and are well done to keep you away from memory management:

-(void)setObject:(NSObject *)newObject {
  if (object != newObject) {
    [object release];
    object = [newObject retain];
  }
}

To release your object you can call:

[self setObject:nil];
a√萤火虫的光℡ 2024-12-07 03:00:27

不需要自己释放原始对象,但是,您仍然需要在 -dealloc 中清理内容。

No need to release the original object yourself, however, you need to still clean things up in -dealloc.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文