在我从书中得到的以下代码中。
NSString * pPath,在类中定义为实例变量。
@interface MainViewController : UIViewController {
NSString *pPath;
}
在设置后的实现中,它被保留。我假设通过赋值,对象会自动保留(因为它是一个NSString),并且不需要另外保留它。
- (void) initPrefsFilePath {
NSString *documentsDirectory =
[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
pPath = [documentsDirectory stringByAppendingPathComponent:
@"flippingprefs.plist"];
[pPath retain];
}
答案 0 :(得分:3)
是的,如果以这种方式获取,则需要保留pPath变量。然而,它不是故事的结尾 - 你还需要释放它以前的值,否则它只会泄漏。
为了简化操作,您可以使用objective-c属性,这些属性允许您自动生成具有所需内存管理行为的setter / getter方法:
// header
@interface MainViewController : UIViewController {
NSString *pPath;
}
@property (nonatomic, retain) NSString* pPath;
// implementation
@synthesize pPath;
- (void) initPrefsFilePath {
NSString *documentsDirectory =
[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
self.pPath = [documentsDirectory stringByAppendingPathComponent:
@"flippingprefs.plist"];
}
这里在self.pPath=...
行中自动生成的setter方法将被调用:
您还需要在dealloc方法中释放您的pPath变量:
-(void) dealloc{
[pPath release];
//or
self.pPath = nil;
[super dealloc];
}