我知道调用像[object theMethod]这样的方法实例是一个消息,要求执行一个动作(一个名为theMethod的方法)。
Apple的documentation对CGRectMake没有帮助。
例如:
当向实例发送消息时,编译器会转换消息表达式:
[receiver message]
调用消息传递函数 objc_msgSend 。 此函数将接收者和消息中提到的方法的名称(即方法选择器)作为其两个主要参数:
objc_msgSend(receiver, selector)
消息中传递的任何参数也会传递给objc_msgSend:
objc_msgSend(receiver, selector, arg1, arg2, ...)
但是CGRectMake怎么样?该功能位于何处?调用函数时的主要区别(过程)是什么?
更新:内存怎么样?例如,在堆栈中创建块。那么CGRectMake呢?
答案 0 :(得分:6)
方法和“普通函数”之间的区别是Objective-C是一个相对简单的C包装器的可悲结果。一些被认为太轻量级而无法实现的类型是使用struct
s或其他实现的更原始的类型,并伴随着普通的C函数或宏来处理它们。您可以在Xcode中按住Command键单击函数名称以查看声明和定义:
// CoreGraphics / CGGeometry.h
struct CGRect {
CGPoint origin;
CGSize size;
};
typedef struct CGRect CGRect;
CG_INLINE CGRect
CGRectMake(CGFloat x, CGFloat y, CGFloat width, CGFloat height)
{
CGRect rect;
rect.origin.x = x; rect.origin.y = y;
rect.size.width = width; rect.size.height = height;
return rect;
}
至于呼唤差异,你大多已经知道了。消息被转换为objc_msgSend
,而诸如CGRectMake
之类的函数是普通的C函数或具有通常语义的宏。