相关疑难解决方法(0)

如何处理@synthesized的版本保留属性?

我对Objective-C中的合成属性有一些疑问.完整列表如下,但基本问题是:编译器如何确保正确释放合成属性的ivars,即使我的代码可能包含或不包含dealloc中的release方法?

注意:我决定不将这些问题作为单独的问题发布,因为它们密切相关,并且因为有一些现有的问题涉及到个别问题,而没有真正了解问题的核心.

有些类似的问题:


设置:考虑具有单个属性的类:

@interface Person : NSObject
{
    NSString * name;
}
@property (nonatomic, retain) name;
@end
Run Code Online (Sandbox Code Playgroud)

问题#1:最基本的案例:

@implementation Person
@synthesize name;
@end
Run Code Online (Sandbox Code Playgroud)

通过这种设置,我假设name每当一个Person对象被释放时它将自动释放.在我看来,编译器只是插入[name release]dealloc方法中,就像我自己键入它一样.那是对的吗?


问题2:如果我选择dealloc为这个类编写我自己的方法,并且我省略了一个调用[name release],那会泄漏吗?

@implementation Person
@synthesize name;
- (void)dealloc { [super dealloc]; }
@end
Run Code Online (Sandbox Code Playgroud)

问题3:如果我选择dealloc为这个类编写我自己的方法,并且我包含一个调用[name release],那会导致双重释放,因为@synthesize已经为我处理了它吗?

@implementation Person
@synthesize name;
- (void)dealloc { [name release]; …
Run Code Online (Sandbox Code Playgroud)

compiler-construction memory-management properties objective-c

65
推荐指数
3
解决办法
1万
查看次数