0

Objective-C Cocos2d プロジェクトを ARC に変換していますが、他のクラスを拡張するサード パーティ クラスを変換しようとすると、いくつかの問題が見つかります。

以下は、表示される ARC エラー メッセージです。

ここに画像の説明を入力

問題に示されている静的メソッドは、他のいくつかのクラス (SneakyButton、SneakyButtonSkinnedBase、SneakyJoystick ..) をこのように拡張する SneakyExtension.h ファイルで定義されています (コードは Steffen Itterheim によってコピーされているため、インターフェイスのみを共有します)。

@interface SneakyButtonSkinnedBase (Extension)
+(id) skinnedButton;
@end

@interface SneakyJoystick (Extension)
+(id) joystickWithRect:(CGRect)rect;
@end

@interface SneakyJoystickSkinnedBase (Extension)
+(id) skinnedJoystick;
@end

ソース コードはここにあります。第 8 章の ShootEmUp03 の例を見てください

私の唯一の推測は、Extensionキーワードが何らかの形で ARC でサポートされていないということですが、Google でこれを見つけたことがあまりなく、Stackoverflow や「ARC への移行」Apple の iTunes U でも見つけられなかったため、間違っていると感じています。チュートリアル。

どんな助けでも大歓迎です。

4

2 に答える 2

2

必要なファイルをインポートします。:-)

なぜそれが機能したかについての私の推測では、コンパイラーは以前よりも正しい宣言にこだわるようになったということです。なぜそうなるのか、私にはわかりません。ただし、最終的に何が機能するかについて最終的な投票を行うのはランタイムであり、joystickWithRectアプリにリンクされたメソッドが実際に存在する限り、以前のビルドではコンパイラ エラーであったとしても、機能的には問題ありません。 -- ある基準によると。

現在遭遇していることは、プログラムの動作には影響しません。コンパイラが正しいことを伝えていることを確認しようとしているだけです。

于 2012-06-29T13:53:29.883 に答える
2

ARC でコンパイルする場合、メソッドを使用するには、joystickWithRectメソッドをパブリックに宣言してインポートする必要があります。NS_RETURNS_RETAINEDコンパイラは、コンパイラが生成する必要がある保持/解放呼び出しを変更するような属性で定義されている可能性があるため、メソッド宣言にアクセスする必要があります。

以前は、retain と release を処理するのは開発者の責任でした。そのため、コンパイラーは、以前に宣言されていなくても、セレクターを呼び出すことができました。

于 2012-06-29T14:05:40.977 に答える