詳細IOSのインタビューの質問(b)の..

記事からの転載:http://www.pythonheidong.com/blog/article/3307/

前の記事では、32のIOSの顔の質問の合計を示しています。http://www.cnblogs.com/fkdd/archive/2012/03/13/2394724.html

答えるために最初の質問から始めてみましょう:

トピック:1.Object-Cクラスの多重継承ことができますか?あなたは、複数のインターフェースを実装することができますか?どのようなカテゴリーがありますか?相続良いか、より良い分類のクラスの道を書き換え?なぜ?

多重継承について:

まず、オブジェクト-cは、多重継承、絶対にコンパイルされていないこのようにコードのようなもの、もちろん、あなたはまた、フロントをNSStringのことができますすることはできません。「:」ああ、もう一度試して取り除きます!

エラー

そして、それを交換する他の方法はありませんか?はい、我々は擬似継承、どこにでも達成するために、我々は、IOSの委託@protocolできる別の方法を何と呼びます。

擬似継承

     再びないobjtive-Cは、多重継承を提供するが、オブジェクトが(他の言語では、一般的方法と呼ばれ、両方の未分化の)応答メッセージの他のクラスにおいて達成することができるように、これは、別の解決策を提供します溶液を、メッセージ転送と呼ばれ、それは別のクラスに実装された応答メッセージクラスを作ることができます。

     一般に、認識されないメッセージは、アプリケーションをクラッシュさせ、ランタイムエラーが生成され送信されたが、クラッシュ前に、各オブジェクトのiPhoneランタイムオブジェクトがメッセージを処理するための第2のチャンスを提供することに留意。メッセージを捕捉した後、メッセージに応答できるオブジェクトにリダイレクトします。

     この特徴は、完全に、メッセージを転送することによって実現されているオブジェクトにメッセージを送るセレクタを処理できない、セレクタは、セレクタとメッセージオブジェクトを受信するforwardInvocation方法に転送されるNSInvocationの元のインスタンスを保存しますそして、パラメータが要求されている。したがって、我々はforwardInvocationメソッドをカバーすることができ、および他のオブジェクトにメッセージを転送します。

1.1 メッセージ転送のために

   そしてforwardInvocation:二つの方法、すなわちmethodSignatureForSelectorをカバーする、プログラム・メッセージ転送機能に添加する前に。methodSignatureForSelector:役割は、別のメッセージクラスの有効な署名の方法を作成することです。forwardInvocation:メッセージを実装し、実際のオブジェクトに転送するセレクタ。

例:

1。

1 - (NSMethodSignature *)methodSignatureForSelector:(SEL)セレクタ
2 {
3 NSMethodSignature *署名= [スーパーmethodSignatureForSelector:セレクタ]。
4
5 であれば(署名!)
6 署名= [self.carInfo methodSignatureForSelector:セレクタ]。
7
8 リターン署名。
9 }

2。

1 - (ボイド)forwardInvocation:(NSInvocation *)呼び出し
2 {
3 SELセレクタ= [呼び出しセレクタ]。
4
5 もし([self.carInfo respondsToSelector:セレクタ])
6 {
7 [呼び出しinvokeWithTarget:self.carInfo]。
8 }
9 }



 3.コール

1車*のてmyCar = [車CAR]; // クラスとして車2 [(NSStringの*)てmyCar UTF8Stringを]   // 注意が方法車で達成されていない、NSStringのUTF8Stringを側ここで呼ばれます

 

説明:詐欺の開発を説明するための例により本明細書にiPhone、self.carInfoは、本実施例で車車のクラスのインスタンスは、別のオブジェクト(NSStringの)の正しい読み取り専用オブジェクトをNSStringのではないセレクタを作成するために実装有効な署名。チェックは現在、有効な署名を実行している、すなわちmethodSignatureForSelectorのオブジェクト(ここてmyCar)を入力しない場合:この場合の方法を、各反復はダミーメソッドで継承し、効果的なメソッドシグネチャを構築しようとしますそのようなコード、第二のチャンスへてmyCarコールUTF8Stringを、現在のオブジェクトからのニュースへのアクセスの欠如は、メッセージをキャプチャする場合、最初の現在有効な方法を作成するために、反復方法を使用して、methodSignatureForSelector :.方法を入力する機会が呼び出されます署名、forwardInvocationに、得られた署名:そのメソッド実装された方法(UTF8Stringを)はforwardInvocation :.最初のメソッド呼び出し(UTF8Stringを)を得られたコールは、かどうか方法に応じてself.carInfo(NSStringのオブジェクト)を決定しますもしそうなら、あなたはself.carInfoオブジェクトにUTF8Stringをオブジェクトの目標を呼び出します。このように、我々は多重継承を実現することができ、ああ!

注:あなたはまだ疑問を持っている場合は、コンテンツを転送するAppleの公式ドキュメントのクエリメッセージを訪れることができます:
住所http://www.apple.com.cn/developer/mac/library/documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/chapter_6_section_1 #// .htmlを
apple_ref / DOC / UID / TP40008048-CH105-SW1

2.委員会

達成するためのデリゲート@protocolの方法によって、また、プロトコルは、プロトコルに記載されているメソッドの実装は、IOSにおける他者によって実装、応答しない、共有メソッドのクラスの複数のプロトコルのリストであることが知られている。これは、私は携帯電話を購入したいので、私はbuyIphone方法がありますが、私はそれが携帯電話を買うか分からないので、携帯電話のビジネスマンを販売するがある場合は、この需要アウト(例えば、ウェブサイトで公開)の放出は、(それは彼ができると言うことですよりも、拍手buyIphoneは、私は携帯電話を購入したいときに、私は直接に..商人を指すオブジェクトを委譲、)彼は彼のクラスで私の手数料、(実現<XXXdelegate>ビジネスマンを受け入れるだろう、見て)この方法を実現しますライン上の彼。

例えば:

@protocol MyDelegate 
- (無効)buyIphone:(NSStringの*)iphoneType金:(NSStringの*)お金。

@end
@interfaceマイ:NSObjectの
{
ID <MyDelegate> deleage。
}
@property(割り当て、非アトミック)ID <MyDelegate> デリゲート
@終わり

コードは、つまり、デリゲートの項目をbuyIphone方法が存在するMydelegateと呼ばれるプロトコルを、宣言しています。私は携帯電話のBuyIphone方法を購入したい場合は、単にデリゲートで呼び出すことができます。

次のように:

- (無効)willbuy 
{
[ デリゲート buyIphone:@ " iphone 4S "お金:" @ 4888 " ];

}

私はこの委員会の現実は、限り、デリゲートは、このクラスを実装し、方法のbuyIphoneプロキシ文が実施されなければならないとして、我々は結果を得ることができなければなりません誰気にしません。

例えば:ビジネス人類はこの手数料を達成するために(と<Mydelegate>は実現を表します)

#import <財団/ Foundation.h> 
の#import " My.h "
@interfaceのビジネス:NSObjectの<MyDelegate>

@end

その後buyIphoneに@implementationビジネスでメソッドを呼び出します

#importを " Business.h " 

@implementationのビジネス

- (無効)buyIphone:(NSStringの*)iphoneTypeマネー:(NSStringの*)マネー
{
のNSLog(@ " 株価、価格はに出荷され、あなたを販売する!!電話で") ;
}
@end

[OK]を友人オン。これはまた、多重継承をシミュレートしていないのですか?委員会が、実際には、あなたは現在のクラスに関係する多重継承の側面を考慮するもの、を取り除くでしょう。

カーン、問題は継続する次の、半書かれていました。ハンドタイピング酸っぱいです!





記事からの転載:http://www.pythonheidong.com/blog/article/3307/

おすすめ

転載: www.cnblogs.com/xiongbatianxiaskjdskjdksjdskdtuti/p/11350202.html