2

この質問は好奇心からであり、それが良いアイデアであるかどうかではなく、私自身の楽しみのためですが、主に C#/JavaScript のバックグラウンドから来ているため、Objective-C でこれを常に見ると、ちょっと醜いように感じます:

MyClass* myObj = [[MyClass alloc] init];

...そして、これを次のように変換できるように C スタイルのマクロを定義できるかどうか興味があります。

MyClass* myObj = new MyClass;

...または構文的に類似したもの。

誰かがこれを行ったことがありますか、または以前に行われたのを見ましたか? なぜそれが恐ろしいアイデアなのかについて自由にコメントしてください(それが非標準でなじみのないものであるという明白な考えを除いて)が、それが可能かどうか知りたいという気持ちを止めることはできません。;)

4

2 に答える 2

7

あなたは確かにこれを機能させることができます:

#define new(x) [[x alloc] init]
MyClass *myObj = new(MyClass);

括弧なしでそれを行う必要がある場合は、運が悪いと思います。

NSObjectnewただし、クラスメソッドを提供します。したがって、たまたま気に入った場合は、すでにこれを実行できます。

MyClass *myObj = [MyClass new];

関連ドキュメントへのリンクは次のとおりです。

于 2013-03-02T00:42:04.120 に答える
1

MyClass *myObj = new(MyClass);使えるならなぜ書くのか

#define createObject(className, objectName) className *objectName = [[className alloc] init]

createObject(NSObject, obj);

あなたのコードは確かにさらに読みにくくなります。その後、次のような他の初期化子のマクロを作成できますinitWith...:

何かができるからといって、そうすべきだというわけではありません。一般に、短いコードではなく、読み取り可能なコードを作成することをお勧めします。

于 2013-03-02T02:41:55.773 に答える