当使用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类可以对较低级别的类型执行相同的操作,如指针或字节字符串.
| 归档时间: |
|
| 查看次数: |
1821 次 |
| 最近记录: |