免责声明:我对 Objective-C 很陌生
我在一个命令行项目中 ARC 未启用
我有一个名为 MyClass 的课程
@interface MyClass : NSObject
@end
@implementation MyClass
@end
我的主要看起来像
int main(int argc, char *argv[])
{
MyClass *first = [MyClass new];
MyClass *second = first;
return 0;
}
问题:
我知道*first的保留计数为 1。但我不明白为什么*second也保留计数 = 1?我没有对该对象执行新建、保留、分配或复制操作。
由于*first的保留计数为 1,我是否必须为此调用 release?正如您在代码中看到的,我必须释放对象,但性能分析器显示没有内存泄漏。为什么?
我注意到*first和*second都具有相同的内存地址值。然后我认为*first保留计数应该在分配时增加到 2。但它没有,为什么?
我注意到,当我保留*first并将其分配给*second 时,它们的保留计数均为 2(见下文)
int main(int argc, char *argv[]) { MyClass *first = [MyClass new]; [first retain]; MyClass *second = first; return 0; }
所以基本上*second成为*first的副本,在这种情况下它什么时候发布?
如果我将代码更改为,两个指针的保留计数会发生什么情况
int main(int argc, char *argv[]) { MyClass *first = [MyClass new]; MyClass *second = first; [first retain]; return 0; }
我的意思是*second保留计数也会增加吗?
先感谢您。