Iphone 目标C线程问题

Iphone 目标C线程问题,iphone,objective-c,cocoa-touch,Iphone,Objective C,Cocoa Touch,代码如下: for(int i = 0; i < personListViewController.peopleCount; i++) { [NSThread detachNewThreadSelector:@selector(getPerson:) toTarget:self withObject:i]; } 当我构建它时,我得到以下结果:警告:传递'detachNewThreadSelector:toTarget:withObject'的参数3:从整数生成指针而不使用强制转换

代码如下:

for(int i = 0; i < personListViewController.peopleCount; i++) {
    [NSThread detachNewThreadSelector:@selector(getPerson:) toTarget:self withObject:i];
}
当我构建它时,我得到以下结果:警告:传递'detachNewThreadSelector:toTarget:withObject'的参数3:从整数生成指针而不使用强制转换


我只想通过detachNewThreadSelector将一个int传递给getPerson,但我不知道如何让它接受对象指针之外的任何东西。这里缺少什么?

作为第一个参数传递给
-[NSThread detachNewThreadSelector:toTarget:withObject:][/code>的选择器必须采用
id
类型的单个参数(指向对象实例的指针)。尽管您可以玩这样的游戏(在大多数平台上),指针大小与
int
相同,并将值键入
id
,然后返回
int
,但您不应该依赖这种行为。相反,编写一个包装器方法,它接受一个
NSNumber
参数,并将
int
包装到一个
NSNumber
中。包装器方法实现可以是:

- (void)getPersonWithNumber:(NSNumber*)number {
  [self getPerson:[number integerValue]];
}
然后,您的循环将是

for(NSInteger i = 0; i < personListViewController.peopleCount; i++) {
        [NSThread detachNewThreadSelector:@selector(getPersonWithNumber:) toTarget:self withObject:[NSNumber numberWithInteger:i];
}
for(NSInteger i=0;i

请注意,我始终从
int
转换为
NSInteger
。除非您使用的是使用
int
的旧代码,否则您应该使用
NSInteger
,它是每个平台上适当大小整数(32或64位)的类型定义在新Cocoa代码中。

您需要将整数包装在NSNumber类中,以使数字成为对象

[NSThread detachNewThreadSelector:@selector(getPerson:) toTarget:self withObject:[NSNumber numberWithInteger:i]];
NSThread不接受原语(如int或char),因此必须使用NSNumber


希望能有帮助。

这就成功了。非常感谢你。在objective-c中,总是一些小事情让我绊倒。
[NSThread detachNewThreadSelector:@selector(getPerson:) toTarget:self withObject:[NSNumber numberWithInteger:i]];