Tin*_*nku 1 copy objective-c retain ios retaincount
当我使用copy时保留了什么,保留NSString属性并将其分配给局部变量?
@interface SomeClass : NSObject
{
NSString *name;
NSString *name2;
}
@property (nonatomic, retain) NSString* name1;
@property (nonatomic, copy) NSString *name2;
Run Code Online (Sandbox Code Playgroud)
如果我将string的值赋给另一个NSString变量,如:
NSString *newString1 = name1;
NSString *newString2 = name2;
Run Code Online (Sandbox Code Playgroud)
什么将保留name1和name2的数量?
NSString *anotherString1 = [NSString alloc]initWithString:name1];
NSString *anotherString2 = [NSString alloc]initWithString:name2];
Run Code Online (Sandbox Code Playgroud)
这里名字1和名字2的保留计数是多少?
分配对象时,其保留计数从1开始.每次保留时,它会增加1,每次释放时,它都会减少1.这里的另一个因素是自动释放.当在自动释放池的上下文中自动释放对象时,当自动释放池耗尽时,其保留计数将自动减少1.
在你的例子中,对于第一个,name1并且newString1都是指向同一个对象的指针,该对象的保留计数保持不变.只有在明确调用retain时它才会上升.与name2和相同newString2.在第二个例子中,你是分配新的一个NSString对象的实例,因此,新的,anotherString1并且anotherString2将有保留1计数name1,并name2会保持不变,再次,因为你没有释放或留住他们.
你的第二个例子与...基本相同copy.虽然retain只是递增对象的保留计数,但copy创建一个具有自己的保留计数的新计数.这里标记的相关内容是您的声明name1和name2属性.如果你设置了这些属性,它们的行为就像我在这里描述的那样,name1保留你设置的属性NSString并将其name2复制为新对象.
总而言之,在OS X中,您可以使用垃圾收集,并在iOS 5上自动引用计数.这些可以显着减少,如果不是消除,你需要担心这些东西.
| 归档时间: |
|
| 查看次数: |
2556 次 |
| 最近记录: |