在Objective-C中,所有执行选择器的方法都类似于:
- performSelector:withObject:
- makeObjectsPerformSelector:withObject:
- performSelectorInBackground:withObject:
并且只能在参数中使用id(指针)对象吗?你知道为什么吗 ?是从C继承而来的东西,要使用线程,我们需要有一个指针?
编辑:并且在Objective-C中,我们无法直接创建指针。如果我想用指针做下面的事情,这行得通吗? (我知道NSNumber和NSValue类,但是我只想了解它是如何工作的)
int i = 5;
int *pointer_i = &i;
[self performSelector:mySelector withObject:pointer_i];
最佳答案
您可以强制转换withObject:(id)pointer_i
,但这是糟糕的主意。
在此特定实例中,withObject:
的参数为retain
ed。如果您在方法期望使用int *
的地方传入id
,则您的程序将崩溃,因为它试图将retain
变成int
!