在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!

08-05 22:59