2008-11-25 30 views
8

khi phát hành một thể hiện có thể tồn tại hoặc không, tôi thường viết điều này:Kiểm tra xem không phải là không trước khi gửi một thông báo phát hành tốt?

if (object! = Nil) [đối tượng phát hành];

nhưng vì gửi thư đến số không phải là một vấn đề, điều đó có cần thiết không?

Tôi cho rằng câu hỏi được đưa ra dưới đây: sử dụng chi phí cao hơn, so sánh đối tượng với 0 hoặc gửi tin nhắn?

Trả lời

14

Xem this page giải thích rằng việc chuyển thư đến nil (để khái quát hóa ví dụ của bạn) hoàn toàn ổn.

Như những gì có chi phí cao hơn, mọi tác động hiệu suất sẽ không đáng kể đối với hiệu suất tổng thể của hệ thống (không tham gia vào thói quen tối ưu hóa sớm).

+1

Gửi tin nhắn sẽ thực hiện kiểm tra nil theo một trong hai cách, do đó, thực hiện kiểm tra nil riêng biệt không phải là tối ưu hóa. Đó là chống tối ưu hóa. – StilesCrisis

2

Không cần kiểm tra. Trừ khi bạn đang làm rất nhiều lần lặp lại của mã này (10.000, có thể nhiều hơn), sự khác biệt thời gian là không đáng kể.

+1

Và thậm chí sau đó, bạn nên sử dụng một trình lược tả trước khi thực hiện bất kỳ tối ưu hóa nào. – Pablo

5

Khi tôi mã hóa C++ nhiều hơn Obj-C, tôi luôn viết mã để kiểm tra nil - bởi vì đó là một lưu ý cho chính tôi rằng con trỏ này được phép là nil. Bây giờ, tôi để cho objc_msgSend giải quyết vấn đề này, vì tôi đã phát triển hơn khi đọc mã với giả định rằng bất kỳ con trỏ nào có thể hợp lệ là nil.

Ở mức "mã hóa an toàn", tôi nghĩ rằng điều quan trọng hơn là luôn đặt con trỏ của bạn thành nil sau mỗi lần phát hành (có thể loại trừ release theo phương pháp dealloc). Bằng cách này, bạn đảm bảo rằng con trỏ của bạn không bao giờ không hợp lệ (nó là hợp lệ hoặc nil).

2

Kiểm tra Obj-C cho nil, vì vậy không cần phải làm điều đó hai lần.

[object release]; object = nil; 

Nếu bạn muốn thêm một số mã thêm ở đó, nó tốt hơn nhiều để thiết lập con trỏ -nil sau đó, vì vậy nó sẽ được miễn dịch với đôi miễn phí.

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