問題タブ [class-cluster]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
xcode - clang を使用したクラス クラスター: `__attribute__((objc_method_family(none)))` の使用方法は?
クラスクラスタを(ARCで)実装したいのですが、clangが邪魔です。別のクラスの具体的なインスタンスを返す 1 つの init メソッドを次に示します。これがクラス クラスターのポイントです。
そしてclangはreturn
声明に不満を述べています:
私はその警告の理由を理解しています:実装クラス (またはおそらくサブクラス) のインスタンスを返すことになっているメソッドinit
のファミリーに属するものとして clang によって認識されます。init
これは通常、インスタンス化する実際の具象クラスが条件によって異なる可能性があるクラス クラスターには当てはまりません。
__attribute__((objc_method_family(FAMILLY)))
clangはalloc
、メソッド ファミリーの自動認識をオーバーライドするアノテーションをcopy
提供init
しmutableCopy
ますnew
。である可能性もnone
あり、ドキュメントには次のnone
ように記載されています。
残念ながら、私の場合はうまく機能させることができません。に次の宣言を追加すると@interface
:
その後、警告は消えません。属性を実装に追加すると:
その後、警告は消えず、エラーも発生します。
両方を実行すると、最初の警告は消えませんが、追加の警告が表示されます。
だから私は初歩的な何かが欠けていると思いますが、何ですか?
これは Xcode 4.3.2 または Xcode 4.4DP2 です。
objective-c - クラスクラスタの「トップ」クラスの名前を取得するには?
設定:
JSON経由でデータが入ってきます。
NSJSONSerialization を使用して、JSON をオブジェクトに変換します。
JSON の数値は、Objective-C ではいくつかの異なる可能なクラス タイプとして提供されます。
( NSNumber, NSDecimalNumber or __NSCFNumber
) - それらはすべて の下のクラス クラスタにありますNSNumber
。
問題:
NSNumber
1) type のいずれかの値を持っている場合、クラス クラスター「傘」 class - を取得する方法が必要NSNumber, NSDecimalNumber or __NSCFNumber
です。
文字列も同様です。これらのいずれかがある場合、を取得する方法が必要ですNSString
: NSString, NSMutableString, __NSCFString, __NSCFConstantString
。
2) たとえば、NSString クラスター内のすべてのクラスのリストをコードで取得できる場合にも機能します。次に、実行時にリストを動的に作成し、リストが完全であることを確認します。
私がこれまでに持っているもの:
これまでのところ、私はそれを行うための正気の方法を思いつくことができませんでした. だから私は許可されたタイプのリストを持っていますが、それは完全ではないかもしれません.
コード: https://github.com/icanzilb/JSONModel/blob/master/JSONModel/JSONModel.m#L45
objective-c - ARC を使用したクラスター初期化子
このドキュメントをクラス clustersで解析すると、おおよそ次のようにNSNumber
実装されます。initWithChar:
同様に、Nib からビューを初期化するためにこのパターンを使用できます。
self
私が疑問に思っているのは、これらの場合、ARC は未返却のリリースを管理しているのでしょうか? それはどこかに文書化されていますか?
ios - 目的のcでクラスクラスタを作成する - 抽象スーパークラスで呼び出されるメソッド?
UITableViewDatasource のクラス クラスターを作成しようとしています。私のインターフェースは次のようになります。
内部的には、抽象クラスは次のようになります。
さて、抽象クラス(ArrayDatasource)がuitableviewデータソースに必要なメソッドを実装していないと不平を言っているコンパイラを沈黙させるために、これらを追加しました:
しかし、クラスターを使用するときはいつでも、データソース メソッド呼び出しは抽象クラスに行きます! これらのオーバーライドを削除すると、すべてが希望どおりに機能します (コンパイラの警告がまだ残っている場合を除く)。
何が起こっている?SingleArrayDatasource
インスタンスが aまたは aのときに、これらのメッセージが抽象クラスに送信されるのはなぜTwoDimentionalArrayDatasource
ですか?
アップデート
具体的なサブクラスの1つを実装する方法は次のとおりです
@implementation SingleArrayDatasource
ios - ARC を使用したクラス クラスター
UIViewController
いくつかのポイントを達成するために、のサブクラスとしてクラスクラスターを作成しようとしています:
1.実際の iOS バージョンによる ViewController の動作の違い
2. iOS のバージョン チェックでコードが乱雑にならないようにする
3.発信者は気にする必要はありません
これまでのところ、クラスMyViewController
、MyViewController_iOS7
およびを取得しましたMyViewController_Legacy
。
インスタンスを作成するには、次のmyViewControllerWithStuff:(StuffClass*)stuff
ように実装されているメソッドを呼び出します。
呼び出し元は を使用しmyViewControllerWithStuff:
ます。その後、そのように作成されたビュー コントローラがUINavigationController
のナビゲーション スタックにプッシュされます。
これは、大きな欠点が 1 つありますが、ほぼ意図したとおりに機能します。ARC はMyViewController_xxx
、ナビゲーション スタックからポップされたインスタンスの割り当てを解除しません。iOSのバージョンは問いません。
私は何が欠けていますか?
更新: -initWithStuff:
このメソッドは にも実装されていMyViewController
ます。違いは後で発生します (例: viewDidLoad:
)。
ios - Swift のカスタム クラス クラスタ
これは比較的一般的な設計パターンです。
https://stackoverflow.com/a/17015041/743957
呼び出しからサブクラスを返すことができますinit
。
Swift を使用して同じことを達成するための最良の方法を見つけようとしています。
Swiftで同じことを達成するためのより良い方法がある可能性が非常に高いことを私は知っています. ただし、私のクラスは、私が制御できない既存の Obj-C ライブラリによって初期化される予定です。したがって、このように動作し、Obj-C から呼び出せるようにする必要があります。
任意のポインタは非常に高く評価されます。
ios - Appleによるクラスターパターン(NSStringおよびNSCFString)と同じ動作を実装するにはどうすればよいですか
テスト目的で次のコードを書いているだけです。
次のエラーが表示されます。
次のコードを書くと、同じことが起こります
グーグルで、それがオブジェクトinitWithFormat
を返すことを知りました。NSCFString
私の質問は、NSCFString
の派生クラスである場合、なぜ でメソッドをNSString
呼び出せないのかということです。可視性を停止できる場合、(派生クラス) のメソッドをオーバーライドせずにコードに実装するにはどうすればよいですか。initWithFormat
NSCFString
NSCFString
簡単に言えば、NSCFString が NSString の派生クラスである場合、なぜその上で基本クラス (initWithFormat) メソッドを呼び出せないのでしょうか?
ios - NSNotification から継承
のサブクラスを作りたいNSNotification
。カテゴリなどを作成したくありません。
ご存知かもしれませんNSNotification
が、やのようなクラス クラスタです。NSArray
NSString
クラスター クラスのサブクラスが次のことを行う必要があることは承知しています。
- 独自のストレージを宣言する
- スーパークラスのすべての初期化メソッドをオーバーライドする
- スーパークラスのプリミティブ メソッドをオーバーライドします (後述)。
これは私のサブクラスです(派手なものはありません):
私がそれを使用すると、私は異常な結果を得る:
から継承するには他に何をしなければなりませんNSNotification
か?
objective-c - Objective-c - クラス クラスタで意思決定をカスケードするための推奨パターン
特定の基準が満たされたときに各「具体的な」クラスがより具体的なインスタンスを返すことができるように、「マルチレベル」のクラスクラスターを作成したいと思います。
たとえば、基本クラスでは次のようになります。
基本クラスに新しい条件 (大きな "if" ステートメント) を常に追加したくありません。これは、条件が具体的なクラスに非常に固有のものになるためです。ほとんどの場合、新しい機能に関係する最適化です。
これにはより良いパターンがありますか?
各サブクラスで追加のチェックを行うクラスメソッドを作成することを考えましたが、これは各サブクラスで [Subclass initWithData:data] を呼び出す必要があるため、非常に面倒です。
ios - 私のコードが [super init] 関数に入らなかったのはなぜですか?
と の 3 つのクラスQuestion
がChoice
ありBlank
、 andはandQuestion
のスーパークラスです。Choice
Blank
次に、次のようにいくつかのメソッドを記述します。
その後:
出力は:</p>
なぜ[super init]
実行されなかったのか理解できませんか?