首页 > 解决方案 > 如何从 int* 转换为 NSNumber*

问题描述

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

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

和函数 runThread 是

- (void)runThread: (NSNumber*) shouldPause

一般来说,我想在线程外部和线程内部设置一些整数,以根据这个整数改变行为。

感谢帮助!

标签: objective-c

解决方案


NSNumber * oShouldPause = @(*shouldPause);

你所做的是一个常见的错误。NSNumber是一个对象,int而是一个原始类型。您将指向原始类型的指针转​​换为指向对象的指针。编译器允许这样做,因为它们都只是指针。此外,代码需要一个对象,试图发送消息和繁荣。出问题了。

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

NSNumber * oShouldPause = @(shouldPause);

推荐阅读