Jon*_*eon 3 core-graphics objective-c ios
为什么iOS中的某些库提供了基于C的API?例如,Core Graphics库由基于C的API提供.但是,我无法理解Apple之所以这样做的原因.
而且,[[UIColor red] setStroke]drawRect中的那种代码:也让我感到困惑!如果Apple决定使用基于C的API,为什么他们使用面向对象的样式代码来做图形事情呢?
并且CGContextAddLineToPoint(),例如,进行论证CGContextRef c.我认为它完全适合使用面向对象的东西.
// current
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextMoveToPoint(context, 0, 0);
CGContextAddLineToPoint(context, 10, 10);
// looks better
CGContext *context = [UIGraphics getCurrentContext]
[context moveToPoint: CGMakePoint(0, 0)] // or [context moveToPointX: 0 y: 0]
[context addLineToPoint: CGMakePoint(10, 10)] // or [context addLineToPointX: 10 y: 10]
Run Code Online (Sandbox Code Playgroud)
那么,为什么Apple在某些库上使用基于C的API?
性能
一个可能的原因是表现.
当您向对象发送消息时,编译器会将其转换为对名为C函数的调用,该函数将objc_msgSend()您要发送消息的对象,消息和消息的任何参数作为参数.然后,它会查找与该消息对应的实际函数所在的位置,并将控制传递给它.
我确信Apple已经优化了地狱,objc_msgSend因为它经常被调用,但它仍然比简单的函数调用慢得多.
| 归档时间: |
|
| 查看次数: |
1062 次 |
| 最近记录: |