我的应用程序中有许多 NSMutableString(将近 10-11 个);全部定义为ivar/property
@property (nonatomic, retain) NSMutableString *str1;
我在某处读到,最好对字符串使用“复制”。真的吗?如果是,我是否可以在我的应用程序中替换 retain to copy 并删除 dealloc 中的 release ?
我还需要考虑其他一些事情吗?
此外,在 1 个应用程序中有 10-11 个 NSMutableString 是否正常。我的意思是从内存使用的角度来看?我的应用程序中也有 4-5 个 NSMutableDictionary。如果可以,请告诉我。
最佳答案
虽然 Taskinoor 的回答是正确的,但我想补充一点解释。
建议对属于具有可变/不可变对的类集群的类使用副本;例如 NSString
/NSMutableString
NSArray
/NSMutableArray
NSDictionary
/NSMutableDictionary
NSSet
/NSMutableSet
这样做的原因是有可能有一个声明为不可变类型(例如 NSString)的属性,但将它传递给一个可变类型(例如 NSMutableString)。在这种情况下,可以按照 Taskinoor 的描述从类外部更改属性。
推荐使用copy
,因为它对类集群表现得很好。向可变类发送 copy
返回对象的不可变副本(即向 NSMutableString
发送 copy
消息返回 NSString
)。但是,将 copy
发送给一个不可变的副本等同于向它发送一个 retain
消息。
关于iphone - NSMutableString 作为保留/复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4995254/