iphone – NSString @property,使用copy而不是retain

iphone – NSString @property,使用copy而不是retain,第1张

概述我正在查看Apple的示例应用程序EditableDetailView,并注意到在他们的一个控制器中,他们使用(非原子,复制)设置NSString属性的实例。什么时候使用副本而不是保留?这是否可以制作独特的副本而不影响现有数据? 是的,它可以制作一个唯一的副本,而不影响现有的数据。合成的设置器本质上是这样的: // For @synthesize(nonatomic, retain) foo:- @H_301_4@ 我正在查看Apple的示例应用程序EditableDetailVIEw,并注意到在他们的一个控制器中,他们使用(非原子,复制)设置Nsstring属性的实例。什么时候使用副本而不是保留?这是否可以制作独特的副本而不影响现有数据?@H_301_4@解决方法 是的,它可以制作一个唯一的副本,而不影响现有的数据。合成的设置器本质上是这样的:

// For @synthesize(nonatomic,retain) foo:- (voID) setFoo(NSFoo *theFoo){    [theFoo retain];  // retain new value    [foo release];    // release old value,if any    foo = theFoo;     // assign new value}// For @synthesize(nonatomic,copy) foo:- (voID) setFoo(NSFoo *theFoo){    NSFoo* newFoo = [theFoo copy];  // make copy    [foo release];  // release old value,if any    foo = newFoo;   // assign new value}

请注意,这里的 *** 作顺序很重要 – 在释放旧值之前,必须保留/复制新值,以便在进行自我分配的情况下。如果您首先发布,然后将属性分配给自己,则可能意外释放该值。另请注意,如果旧值为零,则发送释放消息是确定的,因为向nil对象发送消息是明确允许的,不执行任何 *** 作。

保留与复制的选择只是决定对象的属性是否与您设置的属性共享相同的值。请考虑以下代码:

// suppose the 'foo' property is declared 'retain' and the 'bar' property is// declared 'copy'NSFoo *foo = ...;NSbar *bar = ...;someObject.foo = foo;someObject.bar = bar;[foo changeInternalState];  // someObject.foo also changes,since it's the same object[bar changeInternalState];  // someObject.bar does NOT change,since it's a copy
@H_301_4@ @H_301_4@ @H_301_4@ @H_301_4@ 总结

以上是内存溢出为你收集整理的iphone – NSString @property,使用copy而不是retain全部内容,希望文章能够帮你解决iphone – NSString @property,使用copy而不是retain所遇到的程序开发问题。

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

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

原文地址: https://outofmemory.cn/web/1036757.html

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

发表评论

登录后才能评论

评论列表(0条)

保存