1
MyClass *var = [[MyClass alloc]initWithSomeNumber:15];
[self addChild:var];
[self removeChild:var cleanup:YES];

我需要打电话releasevar?或者该removeChild方法是否已经解决了这些问题?有没有一种var无需使用即可创建的方法alloc?我听说有一个节点的类方法叫做node. 但它不接受参数(如您所见,我需要传递整数 15)。

4

3 回答 3

3

如果你不使用 ARC,是的,你需要释放它。self当你添加它时会保留子元素,当你删除它时释放它,这仍然会从你的 alloc/init 调用中留下隐式保留。

于 2012-05-23T22:10:52.347 回答
2

是的,它是内存管理策略中定义的规则之一

您拥有您创建的任何对象

您用于alloc为 分配空间var,这会将var引用计数器设置为 1。无论有多少其他对象在此之后(通过发送retain)声称拥有所有权,您都必须继续发送releasevar将引用计数器减 1。否则,引用计数器将永远不会达到0 这意味着用于的内存var永远不会被释放,即最终导致内存泄漏。

MyClass *var = [[MyClass alloc]initWithSomeNumber:15]; // ref count = 1
[self addChild:var]; // ref count ++
[self removeChild:var cleanup:YES]; //ref count--
//ref count is 1
于 2012-05-23T22:22:16.460 回答
1

使用 ARC 此链接将对您有所帮助

于 2012-05-23T22:04:20.867 回答