假设我有这段代码......
foo.h中
@interface Foo : NSObject {
NSString *aString; // 1
}
@property (nonatomic, retain) NSString *aString;
foo.m
@synthesize aString = _aString;
....
- (void)dealloc {
[aString release];
[super dealloc];
}
我的问题是:
感谢。
答案 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,这需要注意。