![](/img/trans.png)
[英]Can an Objective-C object be deallocated while an instance method is being invoked on it?
[英]How can an Objective-C method refer to the object that invoked it?
這是如此簡單,它使我發瘋,以至於我找不到答案。
方法如何引用調用它的實例?
示例:在某些類alpha的方法中,我有“ [bravo charley]”
我想讓charley方法執行“ [alpha-instance delta];” 與執行“ [bravo charley]”的特定alpha實例。 但是查理對alpha或其實例一無所知。
換句話說,如何從由alpha-instance中的方法調用的charley方法中獲取對alpha-instance的引用?
我可以做類似的事情
in bravo.h:
-(id) charley:(id)invoker;
in alpha.m:
[bravo charley:self];
然后是“ [invoker delta]”; 在查理方法中,但這看起來很難看。
完成此操作的常見習慣是在消息中傳遞一個稱為sender
的參數,大致像您的示例一樣。 例如,這就是如何指定綁定為用戶界面動作的方法-例如
-(IBAction)doTheThing:(id)sender
沒有內置的方法來獲取發送消息的對象,並且很少需要它。
為了明確起見,一個方法不一定總是被另一個對象調用,因此運行時無論如何也無法可靠地提供此類信息。 例如,
int main (int argc, char *argv[])
{
SEL releaserSel = @selector(release);
NSObject *someObject = [[NSObject alloc] init];
IMP releaserImp = [someObject methodForSelector:releaserSel];
releaserImp (someObject, releaserSel);
// someObject has been released!
return 0;
}
它可能並不像您想的那樣稀有。 直接調用方法比發送消息要快得多(在反復向同一對象發送相同消息的情況下,這很有幫助)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.