iphone - NSMutableString 作为保留/复制

标签 iphone objective-c cocoa-touch copy

我的应用程序中有许多 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/

相关文章:

iphone - 在xCode中引用来自不同目标的类以进行iPhone单元测试

ios - UITextField 应该只接受数字值

iphone - 如何从 Phonegap(iPhone 应用程序)调用 SOAP 服务

cocoa-touch - 显示键盘时缩小所有 View

ios - 密集的数据处理使UI交互无法生效

iPhone - 使用CGContextShowTextAtPoint绘制特殊字符

iOS:使用谷歌登录

iphone - 在 Interface builder 中放置的 UIView 中,init *真的*发生在哪里?

iOS:如何从一个应用程序打开其他已安装的应用程序?

objective-c - 如何在 Objective-C 类中初始化常量成员 C 数组?