簡體   English   中英

調用發布方法導致iOS應用崩潰

[英]Calling release method crashes iOS app

我將UIView子類化為工具欄,並向該類添加了各種按鈕和其他視圖。 現在,在我的ViewController標頭中,我有這個:

@interface GridViewController : UIViewController <UIWebViewDelegate, UIScrollViewDelegate> {
    Toolbar *toolbar;
}

@property (retain) Toolbar *toolbar;

在實現中,我有:

@synthesize toolbar;

- (void)viewDidLoad {
    [super viewDidLoad];
    CGRect toolbarRect = CGRectMake(0, 0, 1024, 40);
    self.toolbar = [[Toolbar alloc] initWithFrame:toolbarRect];
    [self.view addSubview:toolbar];
}

- (void) dealloc {
    [toolbar release];
    [super dealloc];
}

現在,如果我運行分析,它基本上說我有潛在的內存泄漏。 如果我添加[工具欄發布]; 在像我通常在添加子視圖時通常那樣調用addSubView:toolbar之后,當我彈出ViewController時應用崩潰。

我究竟做錯了什么? 我已經嘗試閱讀所有有關內存管理的內容,並根據這些內容,您始終必須釋放/自動釋放您分配/復制/保留的內容。如果查看代碼,我會將實例變量保留在標頭中,並且還將在實現中分配它,因此保留計數應為+2,因此我需要將其釋放兩次,但是似乎我誤解了一些東西。 很感謝任何形式的幫助。

當我說崩潰時,我得到了:Xcode暫停並說main.m中此行的EXC_BAD_ACCESS

int retVal = UIApplicationMain(argc, argv, nil, nil);

在控制台中,我得到以下信息:

modifying layer that is being finalized - 0x60895f0 

如果將self.toolbar屬性設置為(retain)則建議在self.toolbar = [[Toolbar alloc] initWithFrame: toolbarRect]; 保留數應為+2。 我建議用self.toolbar = [[[Toolbar alloc] initWithFrame: toolbarRect] autorelease]替換該行,以使保留計數保持為1。這可能應該解決,因為addSubview的保留不受您和您釋放了dealloc toolbar

具有保留設置器的所有屬性都應被賦予一個自動釋放的對象。

看來問題出在實際上是在Toolbar類中,而不是在ViewController中。 我沒有使用setter來作為ivars,因此它開始崩潰了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM