Fre*_*eer 1 casting objective-c
我一直想知道这一点,Google没有向我提供我想要的信息.铸造过程有多快?它取决于对象具有的字段数量吗?这是不是要不惜一切代价避免的事情?它在x32,x64和ARM机器上有所不同吗?
转换仅供编译器向您发出更好的警告.在运行时,转换没有性能损失.所有对象都只是对象.您将消息发送到这些对象.
当您在代码中指向该对象时,运行时不关心您给出的类型.它会发送消息,无论如何.
例如:
NSArray *myString = [NSString stringWithFormat:@"Hello"];
NSNumber *longerString = [(NSString *)myString stringByAppendingString:@" World"];
NSLog(@"%@", longerString);
Run Code Online (Sandbox Code Playgroud)
会记录Hello World.您确实为事物提供类型,以便编译器可以检查,但运行时只知道您将消息传递给对象.它将使用对象的类来查找从消息名称调用的方法,但它不关心您在编译时键入的内容.
你也可以做到:
id myString = [NSString stringWithFormat:@"Hello"];
id longerString = [myString stringByAppendingString:@" World"];
NSLog(@"%@", longerString);
Run Code Online (Sandbox Code Playgroud)
运行时将执行完全相同的操作,但编译器将以不同的方式匹配您的类型并根据不同的语义生成警告/错误(基本上,任何对象都说它响应此消息).
| 归档时间: |
|
| 查看次数: |
1426 次 |
| 最近记录: |