处理将简单数据传递给'withObject'调用的正确方法

时间:2011-05-19 20:48:05

标签: objective-c

使用objective-c时,有许多不同的方法可以偶然发现使用withObject的内容。 performSelectorOnMainThread就是一个很好的例子。

[self performSelectorOnMainThread:@selector(aSelector) withObject:anObject waitUntilDone:YES];

这将使用对象anObject调用选择器aSelector。我经常发现自己有一个选择器,它采用一个简单的数据类型,如int或enum,我想把它传递给'withObject'。这样做的正确方法是什么?

2 个答案:

答案 0 :(得分:7)

对于那些类型的操作,Cocoa真的想要一个派生自NSObject的Objective-C类。要传递简单类型(如integer,bool或float值),NSNumber类可用于在选择器调用之间封装值。使用类提供的实用程序方法可以很容易地从基本类型创建NSNumber对象,并从对象中检索该基本类型:

- (void)action:(id)sender
{
    enum EnumType eVal = /* ... */;
    [self performSelectorOnMainThread:@selector(aMethod:) withObject:[NSNumber numberWithInt:(int)eVal] waitUntilDone:YES];
}

- (void)aMethod:(NSNumber)enumValue
{
    enum EnumType eVal = (EnumType)[enumValue intValue];
}

还有一个NSValue类可以对较低级别的类型执行相同的操作,如指针或字节串。

答案 1 :(得分:2)

你想要把它包装在某种对象中。无论是自定义数据对象还是简单基元,都使用NSNumber