2010-07-23 36 views
8

Tôi thừa kế một ứng dụng iPhone tại nơi làm việc và tôi mới vào Objective-C vì vậy tôi chưa có vòng bi của mình. Tôi gặp phải mã tương tự như sau:Nên -ealloc làm bất cứ điều gì khác hơn là bộ nhớ phát hành?

- (void) dealloc { 
    [[StaticObject sharedObject] showSomeDialog]; 

    [super dealloc]; 
} 

Tôi biết điều này được cau mày bằng các ngôn ngữ khác. Cảm giác nhện của tôi đang phát điên khi nhìn vào mã đó.

Đây có phải là thành ngữ C Mục tiêu chung không? Hay tôi có một codebase crappy để sửa chữa?

Trả lời

7

Bạn không nên đặt mã giao diện người dùng trong một -dealloc. Quy tắc chung của ngón tay cái, chỉ sử dụng -dealloc để làm sạch những gì bạn đã thực hiện: phát hành các đối tượng, loại bỏ các quan sát viên, v.v.

Hãy xem xét điều gì sẽ xảy ra nếu đối tượng này sống trên một sợi khác với sợi chính ... bây giờ bạn sẽ có mã giao diện người dùng đang chạy trên chuỗi không phải chính, là một điều xấu .

+4

Phiên bản ngắn: "Có, bạn có thể có một bộ mã hóa crappy để sửa." ;-) –

+1

Tốt để xem trực giác của tôi được xác nhận. – ageektrapped

0

Bạn có thể thực hiện việc này vì một số lý do gỡ lỗi. Nhưng tôi không nghĩ rằng bạn nên làm bất cứ điều gì như thế này! Điều này có nghĩa là một hộp thoại sẽ được nhắc khi một đối tượng đang được deallocated. Vì vậy, nếu bạn cần bất kỳ cơ chế để hiển thị một hộp thoại tại một thời điểm nhất định không làm cho nó phụ thuộc vào một đối tượng đang được deallocated. Trong phương thức dealloc, bạn thực sự chỉ cần giải phóng tất cả các đối tượng được giữ lại bởi đối tượng deallocated. Và không làm một số tính năng ứng dụng ưa thích.

Các vấn đề liên quan