2011-01-05 20 views
5

Tôi bắt đầu đập vào ứng dụng của tôi và đã nhận được cách sâu và nó đang chạy tuyệt vời nhưng tôi nghĩ rằng tôi để cho một số công cụ chạy một chút hoang dã.phát hành mọi thứ bạn có @prontty @synthesize cho?

Đối với mỗi @property (nonatomic, retain) thì tôi tạo một @synthesize cho tôi cần phải có [release release] trong phương thức dealloc - điều này có đúng không?

Thậm chí nếu đó là IBOutlet?

+0

+1 để rõ ràng. – gabaum10

+0

@Joe (hoặc 'copy') –

+0

cảm ơn các bạn, tôi nghĩ rằng nó cuối cùng đã làm cho nó thông qua hộp sọ dày của tôi – Slee

Trả lời

11

Có. Bạn tuyên bố quyền sở hữu đối tượng bằng cách đặt thuộc tính là retain, có nghĩa là bạn phải từ bỏ quyền sở hữu bằng cách phát hành nó.

+2

Xem thêm: http://stackoverflow.com/questions/2189919/how-is-release-handled-for-synthesized -nội dung-tài sản –

+0

cảm ơn, chương trình đầu tiên của tôi và tôi chỉ để theo dõi - có một tấn tài sản để phát hành :) – Slee

+0

bạn có thể muốn kiểm tra Accessorizer ... nó sẽ làm cho cuộc sống của bạn dễ dàng hơn. http://www.kevincallahan.org/software/accessorizer.html – joshpaul

1

Có. Nếu bạn giữ lại tài sản, bạn có trách nhiệm giải phóng nó.

Thuộc tính được khai báo về cơ bản có vị trí khai báo phương thức truy cập; khi bạn tổng hợp một thuộc tính, trình biên dịch chỉ tạo ra bất kỳ phương thức truy cập vắng mặt nào. Không có tương tác trực tiếp với phương thức dealloc — các thuộc tính không tự động được phát hành cho bạn.

Declared Properties

Thông thường bạn sẽ làm điều này trong phương pháp dealloc của bạn.

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

Bên cạnh đó, nếu bạn có một giữ lại IBOutlet, bạn nên thả nó và đặt nó vào nil trong -viewDidUnload. Điều đó cho phép đối tượng phát hành các cửa hàng của nó khi khung nhìn bị loại bỏ, đặc biệt là để đáp ứng với một cảnh báo bộ nhớ thấp. Bằng cách đặt ivar thành nil trong phương pháp đó, bạn tránh nguy cơ phát hành đôi ivar nếu đối tượng sau đó được phân bổ lại.

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