iphone - 属性和实例变量

时间:2012-01-18 16:28:52

标签: iphone objective-c ios properties

假设我有这段代码......

foo.h中

@interface Foo : NSObject {
    NSString *aString; // 1   
}

@property (nonatomic, retain) NSString *aString;

foo.m

@synthesize aString = _aString;


....

- (void)dealloc {
    [aString release];
    [super dealloc];
}

我的问题是:

  • 我真的需要在“1”中声明aString吗? (见代码)
  • 如果我正在合成aString = _aString,我已经在创建一个实例了 变量,对吧?
  • 如果我在foo.h(@property)上保留该属性,为什么Xcode会在dealloc中释放aString时抱怨?

感谢。

2 个答案:

答案 0 :(得分:0)

使用@synthesize,实例变量(您的“1”)应为NSString* _aString

您使用不同命名变量进行综合的原因是,您始终使用self.aString来正确释放旧对象,而不是通过直接修改aString来意外覆盖指针。

您是否启用了ARC?如果是这样,那就是Xcode抱怨释放它的原因。

答案 1 :(得分:-1)

答案: -

我真的需要在“1”中声明aString吗? (参见代码) - 现在使用iOS 4,您无需声明。

如果我正在合成aString = _aString,我已经创建了一个实例变量,对吗? - 是的

如果我在foo.h(@property)上保留该属性,为什么Xcode会在dealloc中释放aString时抱怨? - 现在你需要使用它 - self.aString = nil,这需要注意。