2013-05-03 27 views
9

Tôi đang cố gắng để tạo ra một số mã ngẫu nhiên trong lớp Objective-C của tôi, bằng cách ghi đè dealloc:Objective-C destructor với ARC

-(void)dealloc { 
    //cleanup code 
    [super dealloc]; 
} 

Mặc dù tôi không thể làm điều này kể từ [super dealloc] là không được phép bởi trình biên dịch khi ARC được kích hoạt. Có cách nào tôi có thể sử dụng không?

Trả lời

22

Từ (tôi nhấn mạnh) Transitioning to ARC Release Notes:

Bạn có thể thực hiện một phương pháp dealloc nếu bạn cần để quản lý các nguồn lực khác hơn giải phóng biến ví dụ. Bạn không phải (thực sự bạn không thể) phát hành các biến mẫu, nhưng bạn có thể cần phải gọi [systemClassInstance setDelegate: nil] trên các lớp hệ thống và mã khác không được biên dịch bằng ARC.

Phương thức dealloc tùy chỉnh trong ARC không yêu cầu cuộc gọi đến [super dealloc] (nó thực sự dẫn đến lỗi trình biên dịch). Chuỗi đến siêu được tự động và được thực thi bởi trình biên dịch.

Vì vậy, bạn có thể làm cùng một loại dọn dẹp trong dealloc khi sử dụng ARC, chỉ cần không gọi super.

5

Khi ARC hoạt động, bạn chỉ cần không gọi [super dealloc]. ARC sẽ làm điều này cho bạn. Ngoài ra, bạn có thể có phương thức prepareForDealloc cho phép bạn gọi super và được gọi từ trong số dealloc trong lớp cơ sở của bạn.