Tea*_*App 4 cocoa casting objective-c
我应该只是变换一个变量,还是用isKindOfClass:它来检查然后再进行投射?哪一个更好,效率更高?(好吧,效率不仅仅是一个问题.)我想string在下面成为一个NSString.
例:
NSString *string = (NSString *)result;
Run Code Online (Sandbox Code Playgroud)
要么:
if(![string isKindOfClass:[NSString class]]
{
//cast it
}
Run Code Online (Sandbox Code Playgroud)
强制转换没有任何运行时效果.这只是给编译器的一个信息,你确定可以从一种类型分配到另一种类型(当你有一个类型时,它也会沉默警告"可能没有响应" id).
NSString * s = (NSString *)[NSNumber numberWithInt:0];
// The compiler will let you do this, but it's pointless, because:
[s floatValue]; // Okay; NSNumber also implements -floatValue
[s lowercaseString]; // Crashes; s is still an NSNumber instance,
// which doesn't respond to -lowercaseString
Run Code Online (Sandbox Code Playgroud)
另一方面,isKindOfClass:在编译时没有任何影响; 它就像任何其他消息一样在运行时发送,然后确定其结果.
我不确定你想要实现什么,但我想不出通过组合这两种机制可以做的任何有用的事情.
没有理由isKindOfClass:在施法前发送,但不是出于你想的原因.要么你在编译时知道这个类,在这种情况下isKindOfClass:是没有意义的,要么你没有,在这种情况下,转换是无效的.
| 归档时间: |
|
| 查看次数: |
1421 次 |
| 最近记录: |