0

现在我用 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

4

5 回答 5

4

不,您不需要释放此按钮,以及在 ARC 下以编程方式创建的 CocoaTouch 框架中的任何其他对象。

于 2012-10-19T08:53:12.227 回答
1

由于您不使用 alloc--Init 进行按钮初始化,因此您不需要释放任何东西

于 2012-10-19T08:53:34.847 回答
0

除了 Wolvorins 的回答:

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

这(也许“显然”)也适用于alloc,copynew

但 Tomasz Wojtkowiak 是对的。ARC 是Automatic Reference Counting,所以你不必发布任何东西,这正是 ARC 的工作。

于 2012-10-19T09:04:49.337 回答
0

但是在 ARC 中,释放是被抑制的,所以没有释放任何 iVar 的问题。并且根据问题 UIButton here is not being assigned using alloc, init。类似的例子是当你分配一个字符串时说[NSString stringWithFormat:@""];或者[NSArray arrayWithObjects];是 autoRelease 。显式释放他们将导致应用程序在该行崩溃

于 2012-10-19T09:13:52.543 回答
0

你不能释放你创建的按钮,因为你没有使用 alloc。所以它没有分配内存。希望这会对你有所帮助。

于 2013-01-24T07:28:33.580 回答