2010-11-08 23 views
12

Tôi đã nhận thấy một chút nhầm lẫn khi nhìn vào các bit khác nhau của mã cả trong sách và trên web khi nói đến triển khai dealloc. Câu hỏi của tôi là khi sử dụng @property mà sau đây tôi nên sử dụng. Cho đến bây giờ tôi đã sử dụng VERSION_001.dealloc, sử dụng bản phát hành hoặc đặt thành nil cho thuộc tính?

@property(nonatomic, retain) NSString *name; 
@property(nonatomic, retain) NSString *type; 
@property(nonatomic, retain) NSString *payload; 
@property(nonatomic, retain) NSString *orbit; 

VERSION 001

- (void)dealloc { 
    [name release]; 
    [type release]; 
    [payload release]; 
    [orbit release]; 
    [super dealloc]; 
} 

VERSION 002

- (void)dealloc { 
    [self setName:nil]; 
    [self setType:nil]; 
    [self setPayload:nil]; 
    [self setOrbit:nil]; 
    [super dealloc]; 
} 

Trả lời

17

Không có khác biệt thực sự, trừ khi bạn không sử dụng các từ khóa @synthesize. Khi bạn thiết lập các thuộc tính là nil, chúng sẽ được đưa ra đằng sau hậu trường của setter. Bây giờ, có thể có một sự gia tăng hiệu suất nhỏ so với phiên bản nắm tay, bởi vì không quá nhiều nhu cầu xảy ra đằng sau hậu trường (ví dụ: so sánh con trỏ và mọi thứ khác mà apple ẩn đằng sau hậu trường). Tôi luôn luôn sử dụng phiên bản 001, bởi vì nó là nhiều hơn đến điểm và các nhà phát triển trong tương lai không phải đào mặc dù mã của tôi để tìm ra những gì tôi đang hoàn thành.

+0

Cảm ơn bạn, những gì tôi đã làm sau, được đánh giá cao. – fuzzygoat

+1

Không có vấn đề gì, bất cứ lúc nào, đừng quên chấp nhận câu trả lời :) –

+3

Một lợi thế lớn mà phiên bản 1 có trên phiên bản 2 là nếu một ngày nào đó bạn sửa đổi setter cho một trong các thuộc tính này để thực hiện một số công việc không tầm thường, bạn sẽ không phải chịu các hoạt động hoặc hành vi không chính xác tiềm năng trong phiên bản 1. Phiên bản 2 có thể dễ dàng khiến bạn giới thiệu các lỗi trong mã của bạn mà không nhận ra nó một số ngày xuống đường. – Ryan

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