在Objective-C中,如果我有方法
-(IBAction) didTouchSomething:(id)sender {
NSString* test = [DataGetter read];
if(test == nil) {
do something
}
}
我是否需要发布测试,或者以内存方式执行其他任何操作?或者在方法完成时自动处理?
答案 0 :(得分:3)
您只需通过alloc,copy,new或retain释放您拥有的内容。检查苹果“Memory Management Programming Guide”。非常明确和乐于助人。
无论如何,您创建的指针都不需要释放。只有它可能指向的对象,但仅在上述情况下。
答案 1 :(得分:2)
您没有调用名称中包含“copy”,“alloc”,“new”或“get”( CANG )的方法 - 所以一定不能发布test
,因为您拥有它。
确保+[DataGetter read]
返回autorelease
d个对象。
示例:
+(NSString *)read
{
NSString *result = [NSString stringWithFormat:@"Homedir: %@", [@"~" stringByExpandingTildeInPath]];
return result; // Correct: You don't own "result", so you can return it as is
}
// Alternate implementation 1:
+(NSString *)read
{
NSString *result = [[NSString alloc] initWithFormat:@"Homedir: %@", [@"~" stringByExpandingTildeInPath]];
return result; // Wrong: You own "result" since you created it!
}
// Alternate implementation 2:
+(NSString *)read
{
NSString *result = [[NSString alloc] initWithFormat:@"Homedir: %@", [@"~" stringByExpandingTildeInPath]];
return [result autorelease]; // Correct: calling autorelease ensures that result is going to be released later on.
}