Apple Developer Connection
Advanced Search
Member Login Log In | Not a Member? Contact ADC

< Previous PageNext Page >

Objective-Cランタイム:メッセージの送信

このセクションの情報は、主にObjective-Cと他の言語とのブリッジレイヤの開発や、低レベルのデバッグを行う際に使う、Objective-Cランタイムライブラリを使用する開発者のみを対象としています。Objective-Cでプログラミングする場合、Objective-Cランタイムライブラリを直接使用する必要はほとんど生じません。

アプリケーションでObjective-Cランタイム関数objc_msgSend_stretを直接呼び出す場合は、インテルベースのMacintoshで正しく動作するようにコードを変更する必要があります。

struct-return関数群に対するx86 ABIはstruct-address-as-first-parameter関数群に対するABIと異なりますが、2つのABIはPowerPC上では同じです。objc_msgSend_stretを呼び出すときには、期待されるstruct return型を使用する関数ポインタ型にこの関数をキャストする必要があります。objc_msgSendSuper_stretを呼び出す場合も同様です。

ABIのその他の詳細については、「アプリケーションバイナリインターフェイス」を参照してください。

アプリケーションでObjective-Cランタイム関数objc_msgSendを直接呼び出す場合は、常に適切な戻り値にキャストする必要があります。たとえば、BOOLデータ型を返すメソッドの場合、PPC Macintosh上では次のコードが正しく実行されますが、インテルベースのMacintoshコンピュータ上では正しく実行されない場合があります。

BOOL isEqual = objc_msgSend(string, @selector("isEqual:"), otherString);

インテルベースのMacintoshコンピュータで確実にコードを正しく実行させるためには、次のようにコードを変更します。

BOOL isEqual = ((BOOL (*)(id, SEL, id))objc_msgSend)(object, @selector("isEqual:"), otherString);


< Previous PageNext Page >


Last updated: 2006-03-08




Did this document help you?
Yes: Tell us what works for you.

It’s good, but: Report typos, inaccuracies, and so forth.

It wasn’t helpful: Tell us what would have helped.
Get information on Apple products.
Visit the Apple Store online or at retail locations.
1-800-MY-APPLE

Copyright © 2007 Apple Inc.
All rights reserved. | Terms of use | Privacy Notice