如果您只是尝试调用该方法,则可以使用标准语法:
[self meth2:next_int];
如果您真的需要使用,performSelectorOnMainThread:
您可以将号码包装在 anNSNumber
中以进行通话。你说你不能这样做,因为你需要改变数字,但你可以拉出一个 int 并改变它:
[self performSelectorOnMainThread:@selector(meth2:) withObject:[NSNumber numberWithInt:next_int] waitUntilDone:NO];
// ... later ...
- (void)meth2:(NSNumber *)number {
int myInt = [number intValue];
// do stuff with myInt
}
但也许你的意思是你想从你的调用中获取数字的值作为输出meth2
。如果这就是你的意思,那么你可以传入一个双指针,这样你就可以接收一个新的对象:
- (void)meth2:(NSNumber **)number {
int myInt = [*number intValue];
// do stuff with myInt
*number = [NSNumber numberWithInt:myInt];
}
// The caller can now operate like this:
NSNumber *number = [NSNumber numberWithInt:next_int];
[self performSelectorOnMainThread:@selector(meth2:) withObject:&number waitUntilDone:YES];
int returnInt = [*number intValue];
当然,这并不是真正的线程安全,所以如果你正在用多个线程做事情,我建议使用@synchronized
关键字来访问多线程访问的变量,或者设置原子属性(即未声明为的属性nonatomic
)。
另外,冰毒对你有害!!哈哈