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

Tur*_*age 1 objective-c

当使用objective-c时,有许多不同的方法可以偶然发现将使用withObject的东西.performSelectorOnMainThread就是一个很好的例子.

[self performSelectorOnMainThread:@selector(aSelector) withObject:anObject waitUntilDone:YES];
Run Code Online (Sandbox Code Playgroud)

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

小智 7

对于那些类型的操作,Cocoa真的需要一个派生自NSObject的Objective-C类.要传递简单类型(如整数,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];
}
Run Code Online (Sandbox Code Playgroud)

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