2010-01-21 3 views
15

Tôi chạy vào một EXC_BAD_ACCESS khi deallocating một đối tượng mà có vài performSelector:withObject:afterDelay nơi phương pháp selector đang kêu gọi đối tượng khác và tôi đang giải phóng các đối tượng ...Làm thế nào tôi có thể loại bỏ tất cả performSelector: withObject: afterDelay :?

// một số nơi trong lớp học của tôi tôi đang kêu gọi

[self performSelector:@selector(callObject1Function) withObject:nil afterDelay:2.0]; 


- (void)callObject1Function{ 
    [object1 function1] // Here i am getting "EXC_BAD_ACCESS" 
} 

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

Tôi chỉ không hiểu tôi nghĩ khi bạn dealloc nó đối tượng, tất cả mọi thứ liên quan đến đối tượng cần được loại bỏ hoặc hủy bỏ, ngay cả các performSelector với sự chậm trễ !! Có thể một số xin giải thích, Cảm ơn bạn .....

Trả lời

27

Sử dụng NSObject 's:

-cancelPreviousPerformRequestsWithTarget:selector:object: 

để hủy bỏ bất kỳ selectors cấp phát thực hiện.

+18

Cũng chỉ NSObject + cancelPreviousPerformRequestsWithTarget: nếu bạn muốn loại bỏ tất cả bộ chọn và đối tượng thực hiện các yêu cầu đến đích đó mà không chỉ định bộ chọn và đối tượng – Bogatyr

23

Tôi đã sử dụng mã sau trong tất cả các ứng dụng của mình và nó hoạt động.

[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(MethodName) object:nil]; 

Xin cảm ơn, Hemang.