我在传递数字作为方法的参数时遇到了一些问题:
- (void)meth2:(int)next_int;
要调用该方法,我需要:
int next_int = 1;
[self performSelectorOnMainThread:@selector(meth2:) withObject:next_int waitUntilDone:NO];
//update next_int and call meth2 again
在这一点上,我得到了一个“来自没有转换的整数的指针”错误,对于 NSInteger
也会发生同样的情况。 NSNumber
没有用,因为它是不可变的,我需要不断更改值。
知道我该怎么做吗?
谢谢。
最佳答案
如果您只是想调用该方法,您可以使用标准语法:
[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
的属性)。
另外,冰毒对你不好!!哈哈
关于iphone - Int 或 NSInteger 作为方法参数的对象。 Objective-C ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2534630/