Ile*_*ruz 2 cocoa objective-c ios performselector
我知道这两者有点类似,但两者之间必须有任何内部差异,
[anObject performSelector:@selector(thisMethod:) withObject:passedObject];
Run Code Online (Sandbox Code Playgroud)
相当于:
[anObject thisMethod:passedObject];
Run Code Online (Sandbox Code Playgroud)
请告诉我在编译,记忆等方面有什么不同.
该performSelector方法的家人都在特殊情况下,绝大多数的OBJ-C方法调用的应该是直接的.一些差异:
间接:当使用performSelector调用方法时,您有两个方法调用; performSelector和目标方法的那个.
参数是对象:当通过performSelector所有参数调用时必须作为对象传递,例如,如果调用一个接受double该值的方法,则必须NSNumber在传递之前将其包装为performSelector.这些performSelector方法在调用目标方法之前解包非对象参数.在直接调用中,不需要包装或展开.
只有两个论据:该performSelector系列只包括通过0,1或2个参数变量,所以你不能用它们来调用这需要3个或多个参数的方法.
您可能会将上述大部分内容视为否定因素,那么有什么好处呢?
动态选择器:该performSelector族允许您调用直到运行时才知道的方法,只需知道其类型(因此您可以传递正确的参数并获得正确的结果); 换句话说,selector参数可以是类型的表达式SEL.当您希望将方法作为参数传递给另一个方法并调用它时,可以使用此方法.但是,如果使用动态选择器进行ARC编译是非常重要的,并且通常会产生编译器警告,因为不知道选择器ARC无法知道参数的所有权属性.
延迟执行:该performSelector系列包括在延迟后调用该方法的方法.
通常使用直接方法调用,只有当它不能满足您的要求时才需要考虑performSelector家庭(或者更为深奥的堂兄弟).
| 归档时间: |
|
| 查看次数: |
3153 次 |
| 最近记录: |