はい、IBOutlet と IBAction はコンパイル前の段階でパーサーによって破棄されるだけなので、コンパイルされた出力には何もありません。そして、上で述べたように、これらは Interface Builder によって単にテキスト処理されるだけなので、接続ウィンドウで使用できるようにするプロパティ/メソッドのサブセットを知ることができます。
ただし、それで同じことを自分で行うのを止めることはできません。プリプロセッサによってコンパイルされた #define を定義し、テキスト処理を使用してそれらを操作することができます。しかし、実行時にはこれらのどれも利用できません。つまり、提案したことを実際に実行することはできません。
プロパティ/ivar を操作して別の ivar に追加情報を追加するマクロを作成することは技術的に可能です。例えば:
#define OUTLET(type,name) type name;BOOL property_##name;
@interface Foo : NSObject
{
OUTLET(NSString*,foo);
}
@end
に展開します
@interface Foo :NSObject
{
NSString* foo;
BOOL property_foo;
}
@end
次に、property_foo の存在を使用して、コードで何かを行うことができます (これは、実行時とコンパイル時に検出できるはずです)。
ただし、これを一般的に行うことはお勧めしません...まず、インターフェイス(したがってメモリオブジェクト)が必要以上に大きくなります。必要な追加情報を保持するために、独自のクラス (または構造体 typedef) を作成することをお勧めします。