Có bộ điều khiển chế độ xem và nó tạo đối tượng "trình tải xuống", có tham chiếu đến bộ điều khiển chế độ xem (dưới dạng đại biểu). Trình tải xuống sẽ gọi lại trình điều khiển chế độ xem nếu nó tải xuống thành công mục đó. Điều này làm việc tốt miễn là bạn ở lại trên xem, nhưng nếu bạn điều hướng đi trước khi tải về hoàn tất tôi nhận được EXC_BAD_ACCESS
. Tôi hiểu tại sao điều này xảy ra, nhưng có cách nào để kiểm tra xem một đối tượng vẫn được phân bổ không? Tôi đã cố gắng kiểm tra bằng cách sử dụng delegate != nil
và [delegate respondsToSelector:]
, nhưng nó sẽ bị nghẹt thở.Tránh EXC_BAD_ACCESS khi sử dụng mẫu đại biểu
if (!self.delegate || ![self.delegate respondsToSelector:@selector(downloadComplete:)]) {
// delegate is gone, go away quietly
[self autorelease];
return;
}
else {
// delegate is still around
[self.delegate downloadComplete:result];
}
Tôi biết tôi có thể,
a) có các đối tượng downloader giữ lại bộ điều khiển xem
b) giữ một mảng các phần mềm download trong bộ điều khiển xem, và thiết lập các giá trị đại diện của họ để nil khi Tôi deallocate bộ điều khiển xem.
Nhưng tôi tự hỏi nếu có cách nào dễ dàng hơn, tôi chỉ kiểm tra xem địa chỉ đại biểu có chứa đối tượng hợp lệ không?
Nếu bạn có thể kiểm tra xem một địa chỉ có chứa một đối tượng hợp lệ, theo định nghĩa, nó sẽ, bởi vì nó sẽ là hợp lệ để truy cập nó để kiểm tra? –
Object-c có rất nhiều trừu tượng ... Tôi có thể tưởng tượng một thế giới mà thời gian chạy có thể cho biết sự khác biệt giữa một địa chỉ với một đối tượng hợp lệ, và một deallocated một. –