Gần đây tôi đã nhận thấy sự cố trong một trong các ứng dụng của tôi khi một đối tượng cố gắng nhắn tin cho đại biểu của mình và đại biểu đã được phát hành.Kiểm tra xem một đối tượng đã được phát hành chưa trước khi gửi một tin nhắn đến số
Tại thời điểm này, ngay trước khi gọi bất kỳ phương pháp đại biểu, tôi chạy kiểm tra này:
if (delegate && [delegate respondsToSelector:...]){
[delegate ...];
}
Nhưng rõ ràng điều này không tính đến nếu các đại biểu không phải là con số không, nhưng đã được deallocated.
Bên cạnh việc đặt đại biểu của đối tượng thành 0 trong phương thức dealloc
của đại biểu, có cách kiểm tra xem đại biểu đã được phát hành chỉ trong trường hợp tôi không còn tham chiếu đến đối tượng nữa không.
'if (delegate)' là thừa - '[delegate respondsToSelector:]' sẽ là false nếu 'delegate' là không. – shosti
Điểm thú vị. Đã không nghĩ về điều đó trước đây. –