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]];