释放在Objective-C中动态创建的所有按钮

时间:2012-10-19 08:49:08

标签: objective-c ios5 xcode4

现在我使用XCode4.2开发IOS应用程序。我在应用程序运行时创建UIButton。所以我的编码在这里:

- (IBAction)btnSync_Click:(id)sender {
    float j=10.0;
    for(int i=1;i<5;i++){
        UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
        button.frame = CGRectMake(j, 170, 100.0, 50.0);
        [button setTitle:[NSString stringWithFormat:@"btn%d",i] forState:UIControlStateNormal];
        [button addTarget:self action:@selector(btn_Click:) forControlEvents:UIControlEventTouchUpInside];
        [fra_btn addSubview:button];
        j=j+110;
    }
}

- (IBAction)btn_Click:(id)sender{
    UIButton *btntmp=(UIButton*)sender;
    NSLog(btntmp.titleLabel.text);
}

我想知道我还需要释放fra_btn(View)中的所有按钮吗?如果是的话我应该怎么做?我的项目是ARC项目。

最好的Rgds, DF

5 个答案:

答案 0 :(得分:4)

不,你不需要释放这个按钮,并且在ARC下以编程方式创建CocoaTouch框架中的任何其他对象。

答案 1 :(得分:1)

由于您没有使用alloc-Init进行按钮初始化,因此您无需发布任何内容

答案 2 :(得分:0)

除了Wolvorins的回答:

只有只有以initnewcopy开头的方法的方法才会假定您拥有该对象,因此只有使用以上三个关键字开头的方法获取的对象才会你必须释放。所有其他方法都应该自动释放。 (可能有一个糟糕的程序员忽略了这个规则,但Apple并不糟糕,所以你可以安全地将它应用于Cocoa类。)

这可能(很明显)也适用于alloccopynew

但Tomasz Wojtkowiak是对的。 ARC是Automatic Reference Counting,因此您不必发布任何内容,这正是ARC的工作。

答案 3 :(得分:0)

在ARC中但是释放被禁止了,所以没有释放任何iVar的问题。根据UIButton这里的问题没有使用alloc分配,init。类似的例子就是你分配一个字符串{{1} }或[NSString stringWithFormat:@""];这是autoRelease。显式释放它们会导致应用程序在该行崩溃

答案 4 :(得分:0)

由于您没有使用alloc,因此无法释放您创建的按钮。所以它没有分配内存。希望这对你有帮助。