2016-11-14 18 views
1

[object theMethod]のようなメソッドのインスタンスを呼び出すことは、そのインスタンスにアクションを実行するように要求するメッセージ(theMethodという名前のメソッド)です。[object method]とCGRectMakeまたはNSRangeMakeの違い

アップルのdocumentationは、CGRectMakeに関しては役に立ちません。例えば

:メッセージング機能、objc_msgSendへの呼び出しに

[receiver message] 

:インスタンスにメッセージを送信するとき

コンパイラがメッセージ表現に変換します。 この機能は、受信機を受け取り、メッセージ、メソッドセレクタとして、その2つの主要なパラメータであるに記載された方法の名称:

objc_msgSend(receiver, selector) 

メッセージに渡された引数はまた、objc_msgSendに渡される。

objc_msgSend(receiver, selector, arg1, arg2, ...) 

しかし、CGRectMakeはどうですか?その機能はどこにありますか?関数を呼び出すときの主な違い(手続き)は何ですか?

更新:メモリについてはどうですか?例えば、スタック内にブロックが作成されます。 CGRectMakeはどうですか?

+0

ご不明な点がある場合は、具体的なコード例をご入力ください。 – rmaddy

+0

'[オブジェクトtheMethod]'はObjective-Cセマンティクスですが、 'CGRectMake()'のような関数はインラインC関数呼び出しです。 http://stackoverflow.com/questions/6207440/what-does-cg-inline-doを参照してください。 – fullofsquirrels

+0

私はそれがObjective-Cだけに関連していないと思います。これはOOPと非OOPの関係です。私はそれが長い答え、賛否両論などを必要とするので、面白い質問であっても、それはかなり広いと思う。 – Larme

答えて

6

方法及び「プレーン機能」との差は、オブジェクティブCのSAD結果がクラスとして実装するにはあまりにも軽量と考えられたいくつかのタイプがstruct Sまたは他のより原始的なタイプを使用して実装されたC.周りに比較的単純なラッパーされていますそれらを処理するためのプレーンなC関数やマクロが付いています。あなたは、コマンドをクリックすることができます宣言と定義を参照してXcodeで関数名を:

// 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関数または通常のセマンティクスを持つマクロです。

関連する問題