問題タブ [respondstoselector]
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.
objective-c - Objective-C: RespondsToSelector: の前に nil をチェックするのはなぜですか?
次のようなコードを見てきました:
しかし、メッセージを に送信すると(これは に評価されます)nil
が返されるだけなので、次のようにしない理由はありません。nil
NO
の場合、前者の方が速いですdelegate == nil
か?いずれにせよ、コードが少ないため、後者を好みます。
そして、less
よりも優れていmore
ます。すべての Unix プロはそれを知っています。
iphone - Objective-C: C 関数がサポートされているかどうかを確認する方法
UIGraphicsBeginImageContextWithOptions
ランタイム チェックを実行して、iOS 4 以降でのみ使用できる を使用できるかどうかを確認するにはどうすればよいですか。
を確認できることはわかって[[UIDevice currentDevice] systemVersion]
いますが、Apple はNSClassFromString()
や などを使用することを推奨していrespondsToSelector:
ます。respondsToSelector:
for C関数はありますか?
objective-c - ObjectiveCでスーパークラスメソッドを呼び出すかどうかをどのように知ることができますか
クラスChildはParentを拡張します。親は、を含むオプションのメソッドを持つプロトコルCを実装します-(void)d
。子には-d
;の実装があります。呼び出す必要があり[super d]
ますか?
言い換えれば、[super d]
何かがそれに応答する場合にのみ呼び出すために、どのコードを書くのですか?親の実装を制御していないと仮定します。いつでも変更される可能性があります。
これが私が考えたすべての方法です。私は現在4番を使用しています。
どうやら賢明な答え1:
親が-dを動的に実装する可能性があるため、これは機能しません。これは、フィールドではなくテストするときに機能します。または、Parentの実装が変更されて、このテストの結果が正しくなくなる可能性があります。
どうやら賢明な答え2:
NSObjectの-respondsToSelectorの実装は、Childで実装を検出し、すべての場合にYESを返すため、これは機能しません。
どうやら賢明な答え3:
これは、スーパークラスが常に-dを実装していることを知っている場合にのみ機能します。インスタンスがこのメソッドが存在するかどうかを動的に判断する場合、この手法は機能しません。実行時にParentの実装に対する静的な変更を取得するという点で1よりも優れています。
どうやら賢明な答え4:
templateReasonを計算し、それを例外理由と比較するのはコストがかかるため、スーパークラスのメソッドが存在しない場合、このパフォーマンスは低下します。
この場合の例外理由文字列の形式は、将来のSDKまたはランタイムリリースで変更される可能性があるため、このメカニズムは脆弱です。
ios - CIFilter が現在の iOS で利用可能であることを確認する
iOS5 の機能の一部を使用したいのですが、iOS4 用に互換性を保ってビルドしたいのですが、問題が発生しています。通常、私はを使用しますrespondsToSelector:
が、これが正しい方法であるかどうか、またはそれが正確に挿入する必要があるかどうかは正確にはわかりません。
私が理解していることから、iOS5+内でのみ利用可能なCIFilterを使用しようとしていますが、これが現在インストールされているOS内で利用可能かどうかを確認するにはどうすればよいですか?
ありがとうございます。
objective-c - ObjectiveC-動的プロパティのrespondsToSelector
現在、オブジェクト(NSManagedObject)のプロパティが存在するかどうかを確認する問題に直面しています。
残念ながら、この方法
常にNOを返します。
CoreDataによって生成されたプロパティが新しいスタイルのプロパティであるためだと思います
では、この問題を解決する方法はありますか?
私は本当にあなたの提案のすべてに感謝します;)
前もって感謝します!アレックス
objective-c - -respondsToSelector: インスタンス メソッドをクラス名またはクラス オブジェクトで使用できるのはなぜですか?
Objective C でのプログラミング、4e、第 9 章、プログラム 9.3:
Q1:
-respondsToSelector:
クラスメソッドではなくインスタンスメソッドなので、クラスでSquare
直接使用できるのはなぜですか?
Q2:
Square
この本には、代わりにここを使用できると書かれています[Square class]
。例外的な近道ですか、それとも何か仕組みがあるのでしょうか。
どんな助けでも本当に感謝します! 前もって感謝します!
c++ - void*ポインタが実行時にobjective-cオブジェクトまたはc++オブジェクトのどちらを指しているかを判断するにはどうすればよいですか?
私はしばらくの間検索しましたが、誰もこの質問をポップしなかったことに驚いたので、ここに行きます:
id引数を取るObjective-Cメソッドがあります。次に、次のアクションに有効かどうかを判断するために使用respondsToSelector:
します。有効でない場合は、バックアップ計画があります。(これはASSERT(0)
:Pではありません)
だから、誰かが私を台無しにしてパスしようとすると(id)someC++Object
、もちろん、私は大きなクラッシュを起こします。
私の質問は単純です:respondsToSelector:
バックアップ計画を使用できるように、C ++オブジェクトを安全に失敗させることができますか(コーダーを顔にパンチする)?
ios - デリゲートは応答しません
2 つの Viewcontroller 間で委任を使用しようとしていますが、残念ながら私の委任は解雇されません。誰かが私が問題を解決するのを手伝ってくれることを願っています. MapBackgroundViewController と呼ばれる ViewContoller と MapsViewController と呼ばれる ViewContoller があります。MapsBackgroundViewController の SegmentedControl が変更された場合、MapsViewController に通知する必要があります。(私は実際に家系カールでiPhoneの地図アプリのようなものを実装しようとしています)
ここに私のコードの一部があります:
MapBackgroundViewController.h
MapBackgroundViewController.m
MapsViewController.h
MapsViewController.m (何らかの理由で以下のメソッドが呼び出されない)
objective-c - RespondsToSelector を使用した場合のパフォーマンスの低下
多くの古いコードをリファクタリングして、JSON 応答に無効な値が含まれる場合は常に、クライアントが悪いサーバー応答とログ例外に対してより堅牢になるようにします。また、respondsToSelector を使用して解析される各ノードの有効性 (データ型) をチェックすることを考えています。
応答のデータ型 (int、bool など) をチェックしています
@"feature_enabled" ノードに 0 または 1 以外のものが含まれている場合、アプリがクラッシュします。
この問題を回避するには、次のようにします
このコードでパフォーマンス分析を行ったことはありませんが、解析する予定のすべての JSON 応答に対してセレクターへの応答をチェックする場合、パフォーマンスの低下が予想される場合に、どのような種類のパフォーマンスが低下するかを誰かが提案できるかどうかを知りたいです。 .
情報源へのポインタは大歓迎です!
objective-c - super replysToSelector:trueを返しますが、実際にsuper(セレクター)を呼び出すと、「認識されないセレクターがインスタンスに送信されます」と表示されます。
OK、少し混乱しています。
UIScrollViewのサブクラスがあります。これは、UI要素のように水平方向にスクロールする「テーブルビュー」を試みたものです。UIScrollView自体は、内部で使用するUIGestureRecognizersを設定し、それらのUIGestureRecognizersのデリゲートとして設定されているように見えます。また、水平テーブル要素/セルに独自のUIGestureRecognizerを設定し、独自のUIGestureRecognizerのデリゲートとして独自のクラスを設定しています。私のクラスはUIScrollViewのサブクラスであるため、実行時に、UIGestureRecognizerデリゲート呼び出しは、UIScrollViewの組み込みUIGestureRecognizersと私自身のUIGestureRecognizersの両方のクラスに送信されます。少しPITAですが、気にしないものを渡すことでこれを回避できます。
問題は、チェック[super respondsToSelector:@selector()]
がYESを返すことですが、実際に呼び出すとreturn [super gestureRecognizer:gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:otherGestureRecognizer];
、次の例外が発生します。
2012-08-31 12:02:06.156 MyApp [35875:707]-[MyAppHorizontalImageScrollergestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:]:認識されないセレクターがインスタンス0x21dd50に送信されました
私はそれが表示されるべきだと思ったでしょう
-[UIScrollViewgestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:]
しかし、それは大丈夫かもしれません。しかし、問題は、それが応答し、その後応答しないと言っていることです。
他の2つのUIGestureRecognizerデリゲートルーチンはこのコードで機能します(明らかに異なるセレクター)。
洞察をありがとう。