iphone - Int 或 NSInteger 作为方法参数的对象。 Objective-C

标签 iphone objective-c nsinteger

我在传递数字作为方法的参数时遇到了一些问题:

- (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/

相关文章:

iphone - 如何将 viewcontroller 作为 self viewcontroller 分配给 appdelegate 类?

iphone - 使用辅助方法创建 UIButton

UITableViewCell 中的 iOS UICollectionView

objective-c - 保留并重新排列核心数据记录的顺序

objective-c - 为什么 cocoa 不在所有地方都使用相同的枚举声明样式?

iphone - 在 XCode 中使用仪器进行内存泄漏检查?

iphone - 我们可以使用phonegap框架在iphone中进行推送通知吗?

ios - 如何使用印度卢比将 NSInteger 转换为 objective-c 中的相应单词

iphone - 我们可以使用 UIPickerView 创建自定义单元格吗?

objective-c - 为什么 NSInteger 变量在用作格式参数时必须转换为 long?