ash*_*ish 9 cocoa cocoa-touch objective-c cocoa-design-patterns
怎么performSelector办?创建新方法NSThread和performSelector方法有什么区别?
它是如何工作的,我们应该在哪里使用它?
Pey*_*loW 23
所有这些都执行相同的任务,即使doStuff方法在当前线程上anObject同步执行:
// 1
[anObject doStuff];
// 2
[anObject performSelector:@selector(doStuff)];
// 3
objc_msgSend(anObject, @selector(doStuff));
// 4
IMP imp = [anObject methodForSelector:@selector(doStuff)];
imp(anObject, @selector(doStuff));
Run Code Online (Sandbox Code Playgroud)
anObject是未知的,通常首先询问对象是否具有该方法-[NSObject respondsToSelector:].IMP (实现),然后直接调用它.如果在紧密循环中使用,有时可以快于1. 只记得; 过早优化是邪恶的.您需要掌握的是Objective-C方法比类/接口更重要.通常,如果对象属于特定类,或者符合任何协议(即编译器要抱怨),则不会查询该对象.在运行时,您可以查询特定方法.
简而言之:无论你是什么,你能做什么都没关系.
为方便起见,NSObject还有几个兄弟姐妹performSelector是异步的.最为显着地:
performSelector:withObject:afterDelay: - 延迟后在当前线程上执行该方法.performSelectorInBackground:withObject: - 在新的后台线程上执行该方法.performSelectorOnMainThread:withObject:waitUntilDone: - 在主线程上执行方法.performSelector:onThread:withObject:waitUntilDone: - 在任何线程上执行该方法.异步执行者都依赖于NSRunLoop函数.除非你自己生成一个线程,否则这不是你需要担心的事情.如果这样做,您还需要运行新线程运行循环.现在就跳过它.
| 归档时间: |
|
| 查看次数: |
6976 次 |
| 最近记录: |