iOS開發——常用Runtime函數

來源:互聯網
上載者:User

標籤:

Runtime函數

1.可以通過NSObject的一些方法擷取運行時資訊或動態執行一些訊息:
1./*Returns a Boolean value that indicates whether the receiving class is a subclass of, or identical to, a given class.*/
1.+ (BOOL)isSubclassOfClass:(Class)aClass;
1./*Returns a Boolean value that indicates whether instances of the receiver are capable of responding to a given selector.*/
1.+ (BOOL)instancesRespondToSelector:(SEL)aSelector;
例如:if ([[Retangle class] respondsToSelector: @selector(print)]==YES) {……}
/*Returns a Boolean value that indicates whether the receiver is an instance of a given class.*/
- (BOOL)isMemberOfClass:(Class)aClass; 例如:[obj isMemberOfClass:[Retangle class]];


除此之外還有: conformsToProtocol 檢查對象是否實現了指定協議類的方法 methodForSelector 返回指定方法實現的地址 performSelector:withObject 執行SEL 所指代的方法


- (id)performSelector:(SEL)aSelector; - (id)performSelector:(SEL)aSelector withObject:(id)object; - (id)performSelector:(SEL)aSelector withObject:(id)object1 withObject:(id)object2; 這三個方法,均為同步執行,與線程無關,主主線程和子一程中均可調用成功。等同於直接調用該方法。在需要動態去調用方法的時候去使用。 例如:[self performSelector:@selector(test2)] 與[self test2];執行效果上完全相同。



- (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay inModes:(NSArray *)modes; - (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay; 這兩個方法為非同步執行,即使delay傳參為0,仍為非同步執行。只能在主線程中執行,在子線程中不會調到aSelector方法。可用於當點擊UI中一個 按鈕會觸發一個消耗系統效能的事件,在事件執行期間按鈕會一直處於高亮狀態,此時可以調用該方法去非同步處理該事件,就能避免上面的問題。 在方法未到執行時間之前,取消方法為:
+ (void)cancelPreviousPerformRequestsWithTarget:(id)aTarget selector:(SEL)aSelector object:(id)anArgument; + (void)cancelPreviousPerformRequestsWithTarget:(id)aTarget; 注意:調用該方法之前或在該方法所在的viewController生命週期結束的時候去調用取消函數,以確保不會引起記憶體泄露。


- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait modes:(NSArray *)array; - (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait; 這兩個方法,在主線程和子線程中均可執行,均會調用主線程的aSelector方法 如果wait傳YES,則為非同步執行,如果wait傳NO,則為同步執行。
注意:apple不允許程式員在主線程以外的線程中對ui進行操作,此時我們必須調用performSelectorOnMainThread函數在主線程中完成UI的更新

- (void)performSelector:(SEL)aSelector onThread:(NSThread *)thr withObject:(id)arg waitUntilDone:(BOOL)wait modes:(NSArray *)array; - (void)performSelector:(SEL)aSelector onThread:(NSThread *)thr withObject:(id)arg waitUntilDone:(BOOL)wait; 調用指定線程中的某個方法。分析效果同3。

- (void)performSelectorInBackground:(SEL)aSelector withObject:(id)arg 起子線程在後台運行

 

iOS開發——常用Runtime函數

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.