如果你只是想调用的方法,你可以使用标准的语法:
[self meth2:next_int];
如果你真的需要使用performSelectorOnMainThread:
您可以将该号码包装在NSNumber
中以进行呼叫。你说,因为你需要更改号码,你不能做到这一点,但你可以只拉一个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
的属性)。
此外,meth对你不好!哈哈
您好泰勒,我不确定关于@synchronized关键字,我会阅读,但因为这整型变量被用作线程的'输出',不需要担心并发和东西。 ..withObject:[NSNumber numberWithInt:next_int] ..效果很好,(NSNumber **)给了我一个不兼容的指针类型警告。 我会记住,关于meth ...谢谢! – sergiobuj 2010-03-28 22:13:40