【问题标题】:IBOutlet collection release problemIBOutlet集合发布问题
【发布时间】:2011-07-19 15:17:02
【问题描述】:

我有一个 IBOutlet 集合的数组

.h

@interface UpisiRezultat : UIViewController {
    NSArray *buttons;
}

@property (nonatomic, retain) IBOutletCollection(UIButton) NSArray *buttons;

.m

@synthesize buttons;

- (void)viewDidLoad
{
    [self setValue:[UIFont fontWithName:@"NeverSayNever" size:22] forKeyPath:@"buttons.font"];
    [super viewDidLoad];
}

- (void)viewDidUnload
{
    buttons = nil;
}

- (void)dealloc
{
    [buttons release]; --> Error
    [super dealloc];
}

为什么当我有[按钮释放]时我的程序会崩溃;在交易中? 没有它,它不会崩溃...

【问题讨论】:

    标签: iphone arrays release


    【解决方案1】:

    更新(Dec1)代码并经过测试。

    - (void)dealloc {
    
        self.buttons = nil;
    
        [super dealloc];
    }
    

    你不应该释放它们。

    http://www.bobmccune.com/2011/01/31/using-ios-4s-iboutletcollection/

    【讨论】:

    • 所以你没有创建数组或连接 IB
    • 它说:修改正在完成的层
    • 我创建了一个阵列并将其连接到网点
    • self.buttons = nil;//在viewdidunload中使用self.
    • 试图在 viewDidUnload 中使用 self.buttons 仍然崩溃,数组在 plist.file 中,这是我正在使用的字体
    【解决方案2】:

    如果您已经使用 Interface Builder 与按钮建立了连接,那么拥有它并释放它的是您的视图。

    【讨论】:

    • 但它保留在属性中
    • 是的,这意味着当 IB 将其添加到视图时,他将使用该属性并在其上调用一个保留。所以你很安全。
    • 所以我不需要发布 IBOutlets 了吗?
    【解决方案3】:

    由于buttons是一个NSArray并且它被显式保留,那么它必须被释放然后在-dealloc中设置为nil。

    请参阅 Darren 的回答:Settings IBOutlets to nil in dealloc 请参阅 IBOutletCollection 示例:http://www.bobmccune.com/2011/01/31/using-ios-4s-iboutletcollection/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-28
      • 1970-01-01
      • 2016-01-29
      • 2014-11-13
      • 2013-11-28
      • 2011-01-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多