【问题标题】:Releasing all buttons that dynamically created in Objective-C释放在 Objective-C 中动态创建的所有按钮
【发布时间】:2012-10-19 08:49:08
【问题描述】:

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

【问题讨论】:

    标签: objective-c ios5 xcode4


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        除了狼王回答:

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

        这(也许“显然”)也适用于 alloccopynew

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            【解决方案5】:

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2020-10-30
              • 1970-01-01
              • 2016-07-10
              • 1970-01-01
              • 1970-01-01
              • 2012-01-22
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多