关于发布的客观C(iphone)问题

sol*_*sol 2 iphone memory-management objective-c

如果我创建一个视图,并将其添加为子视图并将其添加到数组中,我是否必须将其释放两次?

    UIView* cat = [[UIView alloc] initWithFrame:someFrame];
    [self.view addSubview:cat];
    [self.animals addObject:cat];
    [cat release];
    [cat release];
Run Code Online (Sandbox Code Playgroud)

有两个发布声明对我来说似乎很奇怪,我没有看到人们这样做.但是在这种情况下,保留计数不会增加2吗?

Chu*_*uck 8

你应该只有一个release- 来平衡alloc.既没有addSubView:也没有addObject:给出调用者对象的所有权,所以调用者不需要用a来平衡它们release.阅读内存管理指南应该清除所有这些.

这可能有助于记住"缉毒特警" -如果你调用对象的方法,包括"字上Ñ EW"," 一个 LLOC"," [R Etain的"或" Ç OPY",你需要释放它.正如您在上面的代码中看到的,只alloc适合账单.由于你只需要一次NARCed,你只需要释放一次.