有時候我們在寫代碼過程中,想讓系統(tǒng)幫我們?nèi)フ曳椒〞r,需要用到makePerformSelector:,但這個方法會報警告:"performSelector may cause a leak because its selector is unknown"
原因:在ARC模式下,運行時需要知道如何處理你正在調(diào)用的方法的返回值。這個返回值可以是任意值,如 void , int , char , NSString , id 等等。ARC通過頭文件的函數(shù)定義來得到這些信息。所以平時我們用到的靜態(tài)選擇器就不會出現(xiàn)這個警告。因為在編譯期間,這些信息都已經(jīng)確定。而使用 [someController performSelector: NSSelectorFromString(@"someMethod")]; 時ARC并不知道該方法的返回值是什么,以及該如何處理?該忽略?還是標(biāo)記為 ns_returns_retained 還是 ns_returns_autoreleased ?
解決方法:
SEL selector = NSSelectorFromString(@"firstResponder");
IMP imp = [self methodForSelector:selector];
UIView * (*func)(id, SEL,參數(shù),參數(shù)) = (void *)imp;
UIView *firstResponder = func(self, selector,參數(shù),參數(shù));
這是我在項目中獲取當(dāng)前第一響應(yīng)者時使用的方法,如果沒參數(shù),請忽略參數(shù) UIView是返回值,各位根據(jù)需求寫就行了;