假设我有一个功能
- (NSString *)fullNameCopy {
return [[NSString alloc] initWithFormat:@"%@ %@", self.firstName, self.LastName];
}
有人可以告诉我如何调用此函数,如何将其值分配给新对象,以及如何释放它,避免内存泄漏和访问不良。
会不会像
NSSting *abc = [object fullNameCopy];
//使用它并发布
[abc release];
或者我也应该分配abc字符串?
更新:
这里的重点是,我可以从函数中返回非自动释放对象,然后在调用函数中释放它们。根据Obj-C函数命名约定,包含alloc或copy的函数名称应返回对象,假设调用函数具有所有权。
与上面的情况一样,我的函数“fullNameCopy”返回一个非自动释放的abject,我想在调用函数中释放它们。
答案 0 :(得分:2)
你是对的。由于方法名称包含单词“copy”,因此Cocoa约定规定该方法返回调用者拥有的对象。由于调用者拥有该对象,因此它负责释放它。例如:
- (void)someMethod {
NSString *abc = [object fullNameCopy];
// do something with abc
[abc release];
}
或者,您可以使用-autorelease
代替-release
:
- (void)someMethod {
NSString *abc = [[object fullNameCopy] autorelease];
// do something with abc
}
答案 1 :(得分:0)
参考this帖子
更新:
- (NSString *)fullNameCopy {
NSString *returnString = [NSString stringWithFormat:@"%@ %@", self.firstName, self.LastName]; // Autorelease object.
return returnString;
}
-(void) someFunction {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSString *fullName = [self fullNameCopy];
[pool release]
}
答案 2 :(得分:0)
喜欢这个:
- (NSString *)fullName { NSString * retVal = [[NSString alloc] initWithFormat:@"%@ %@", self.firstName, self.LastName]; return [retVal autoRelease]; }
然后
NSSting * abc = [object fullName];
答案 3 :(得分:-1)
return [[[NSString alloc] initWithFormat:@“%@%@”,self.firstName,self.LastName] autorelease];