使用objective-c时,有许多不同的方法可以偶然发现使用withObject的内容。 performSelectorOnMainThread就是一个很好的例子。
[self performSelectorOnMainThread:@selector(aSelector) withObject:anObject waitUntilDone:YES];
这将使用对象anObject调用选择器aSelector。我经常发现自己有一个选择器,它采用一个简单的数据类型,如int或enum,我想把它传递给'withObject'。这样做的正确方法是什么?
答案 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
。