【发布时间】:2012-04-20 16:05:29
【问题描述】:
我有一个具有两个属性的类:
@interface Contact : NSObject {
NSString *lastname;
NSString *lastNameUpper;
}
我已经将 lastname 声明为一个属性(并在 .m 文件中合成它):
@property (nonatomic, retain) NSString *lastname;
但是,我想编写自己的方法来访问lastNameUpper,所以我声明了一个方法:
- (NSString *) lastNameUpper;
并像这样实现它:
- (NSString *) lastNameUpper {
if (!lastNameUpper) {
lastNameUpper = [lastname uppercaseString];
}
return lastNameUpper;
}
这很好用,但是由于它经常被调用,所以会调用很多临时对象。有趣的是,Instruments 显示很多“Malloc (4k)”,每次访问lastNameUpper 时数量都会增加。我还可以看到内存分配在objc_retailAutoreleaseReturnValue。
由于在我将项目转换为 ARC 之前它工作正常,我假设我必须对方法签名进行一些 ARC 特定的添加,但我似乎无法使其工作。
有什么建议吗?
【问题讨论】:
-
这段代码没有任何问题(除了你应该设置属性
copy,并在设置姓氏字符串时设置大写字符串)。你在说什么临时对象?它造成了哪些实际问题? -
@jrturton 用更多细节更新了问题。
标签: objective-c ios nsstring automatic-ref-counting