我有以下代码。它可以编译,但是会崩溃。
我究竟做错了什么 ?

- (void)start: (int*)shouldPause
{
    NSNumber * oShouldPause = (NSNumber *)shouldPause;
    [self performSelectorInBackground:@selector(runThread:) withObject: oShouldPause];
}


和功能runThread是

- (void)runThread: (NSNumber*) shouldPause


通常,我想在线程外部和线程内部设置一些整数,以根据此整数更改行为。

感谢帮助!

最佳答案

NSNumber * oShouldPause = @(*shouldPause);


您所做的是一个常见错误。 NSNumber是对象,而int是原始类型。您将指向原始类型的指针转​​换为指向对象的指针。编译器允许它们都只是指针。此外,代码还希望有一个对象,试图发送一条消息并引起轰动。出了些问题。

您很可能不需要int*作为参数。只是int。因此,您需要按如下方式创建数字对象,而无需取消引用:

NSNumber * oShouldPause = @(shouldPause);

关于objective-c - 如何从int *转换为NSNumber *,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51751677/

10-12 18:00