我对 Objective-C 还是很陌生。
据我所知,任何我没有从 alloc、new、copy 或 mutableCopy 获得的对象都应该被假定在自动释放池中。
我认为这也意味着,如果我创建一个创建并返回对象的新实例的函数,我应该在返回之前将其放入自动释放池中。
例如,我有一个解析 xml 的函数,并返回一个表示 xml 中数据的对象,该对象在返回之前应该位于自动释放池中。
我主要关心的是 iPhone 的开发,但如果能得到一般性的答案将不胜感激。
您可以通过两种方式执行此操作:返回调用者拥有的对象,或者返回调用者不拥有的对象(例如,自动释放的对象)。无论您选择哪种策略,都请遵循命名约定。例如,
- (NSString *)fullNameCopy {
return [[NSString alloc] initWithFormat:@"%@ %@", self.firstName, self.LastName];
}
返回一个NSString
调用者拥有的对象。方法名称是fullNameCopy
,它遵循命名规则:名称中包含“copy”的方法返回调用者拥有的对象。返回值不放入自动释放池中。
或者,
- (NSString *)fullName {
return [NSString stringWithFormat:@"%@ %@", self.firstName, self.LastName];
}
or
- (NSString *)fullName {
NSString *s = [[NSString alloc] initWithFormat:@"%@ %@", self.firstName, self.LastName];
return [s autorelease];
}
返回一个不属于调用者所有的字符串,并且方法名称不包含 alloc、new 或 copy。返回值是自动释放的,因此当相应的自动释放池耗尽时,它将被释放,除非调用者明确选择保留它。
也就是说,在您的特定场景中,第二种策略(返回不属于调用者的对象)看起来是更好的解决方案。调用者很可能会立即处理该对象(因此他不会对拥有该对象感兴趣)或将其保留在属性中(很可能是副本或保留属性)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)