// 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所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)