objective-c – NSString属性:copy或retain?

objective-c – NSString属性:copy或retain?,第1张

概述假设我有一个名为SomeClass的类和一个字符串属性名: @interface SomeClass : NSObject{ NSString* name;}@property (nonatomic, retain) NSString* name;@end 我知道名称可能会分配一个NSMutableString在这种情况下,这可能会导致错误的行为。 >对于字符串一般来说,使用c 假设我有一个名为SomeClass的类和一个字符串属性名:

@interface SomeClass : NSObject{    Nsstring* name;}@property (nonatomic,retain) Nsstring* name;@end

我知道名称可能会分配一个NSMutableString在这种情况下,这可能会导致错误的行为。

>对于字符串一般来说,使用copy属性而不是retain是一个好主意吗?
>是“复制”属性以任何方式比这种“保留”属性效率低吗?

解决方法 对于类型为符合NScopying协议的不可变值类的属性,您几乎总是应在@property声明中指定copy。指定保留是在这种情况下你几乎不想要的东西。

这就是为什么你想这样做:

NSMutableString *somename = [NSMutableString stringWithString:@"Chris"];Person *p = [[[Person alloc] init] autorelease];p.name = somename;[somename setString:@"Debajit"];

Person.name属性的当前值将根据属性是否声明保留或复制而有所不同 – 如果属性标记为retain,则为@“Debajit”,如果属性标记为复制,则为@“Chris”。

因为在几乎所有情况下,你想要防止突变后面的对象的属性,你应该标记表示它们的属性的属性。 (如果你自己编写setter而不是使用@synthesize你应该记住实际上使用copy而不是retain。)

总结

以上是内存溢出为你收集整理的objective-c – NSString属性:copy或retain?全部内容,希望文章能够帮你解决objective-c – NSString属性:copy或retain?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1050654.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-25
下一篇2022-05-25

发表评论

登录后才能评论

评论列表(0条)

    保存