面接問題の回顧

6020 ワード

回顧:C言語の基礎文法配列関数OC
XCODEバージョン(7.3)コンピュータシステムバージョン(MAC OS X EI Capitan)モバイルデバイスバージョン(iOS 9.1.1)
オブジェクト向けoop(OC)プロセス向け(C)プロセス向けプロセスは、プロセス化されたステップごとに次のステップの実行に影響します.プログラムが正常に実行されたかどうか、オブジェクト向けにステップの制約を受けません.操作時にこのオブジェクトがなければ深刻な影響を受けません.
import、#includeと@classの違いは何ですか?
@class                          ,          ,                   , m         #import。
 #import  #include             。

オブジェクト向けの3つのフィーチャーパッケージ継承マルチステート
メモリ管理
メモリ管理の原則alloc retain copy(retainCount+1)があれば対応するrelease(retainCount-1)が必要で、誰がretainを解放して保有を表すかを割り当てる(予約)プロパティリファレンスカウントに1 copyを追加して割り当て値をコピーすると、前のオブジェクトの影響を受けないオブジェクト9 allocが生成されます.この関数が対をなす関数dellocがオブジェクトを破棄するときにallocを呼び出してオブジェクトにメモリを割り当てるときに呼び出されます.
autoreleaseとreleaseの違いrelease autoreleaseは、オブジェクトの参照カウント-1 release即時解放autorelease遅延解放であってもよい
自動リリースプールNSAutoreleasePool@autoreleasepool{
}オブジェクトの解放時間に注目しないプールを出るときに自動的に解放(autoreleaseを呼び出す)自動解放プールもオブジェクトですalloc initで初期化しても自動解放プールを解放するオブジェクトが必要です
自動リリースプールの使用for(int i=0;i<10;i++){@autoreleasepool{NSObject*obj=[[NSObject alloc]init]autorelease]}}
setter getterのメモリ管理
  • (void)setUser:(NSObject *)user{ if (_user!=user) { [_user release]; _user = [user retain]; } }
  • (NSObject *)user{ return _user; }
  • (void)dealloc{ [super dealloc]; [_user release],_user = nil; }

  • 継承categoryの区別継承変数呼び出しを追加する場合は、サブクラスのオブジェクトを使用して、サブクラスが親クラスを持つすべての属性メソッドにcategoryプロトコルを含むすべての属性メソッドを呼び出すことができます.categoryはメソッド呼び出しを追加するときに既存のクラスのオブジェクトを使用して呼び出すしかありません
    OCにはどのくらい継承されていますか?どのように多継承を実現しますか?多継承がなくてマルチレベル継承はエージェントを使って実現することができます
    category estensiton区別categoryクラスは、既存のクラスを変更せずに拡張メソッドestensiton拡張に非公開の変数属性メソッドを追加する
    protocolとはプロトコルが統一された対外インタフェースであり、彼を通じて複数のクラスを検索する方法を実現することができる.
    エージェントが完全なエージェントを書くのは、自分が完成できない依頼を他の人に完了させることでコールバックに使用できます.
    エージェント通知の違いエージェントは一対一の通知が一対多である
    通知KVOの違いKVOは、キー値観察者が観察した属性値が変化することによって観察を呼び出す方法通知であり、通知名によって受信通知を送信する
    KVO KVCの区別KVCキー値符号化属性名をkeyとして属性の値を変更するKVOキー値観察者がKVCで属性をkeyとして属性値の変化を観察することに応答する
    実際の作業でどこでKVC KVOデータ回転モデルを使ったのかKVCパッケージドロップダウンでナビゲーションバーの透明度を変えたときに使ったのはKVO
    宣言は、単一のsingletonメソッドでオブジェクトを一度だけ作成することで、メモリコストを節約する使用環境の繰り返し作成を回避できます.繰り返し作成する必要のない操作クラスでデータベース・ネットワークをカプセル化して、使用時に他のオブジェクト(現在のユーザー)に作成したくない固定オブジェクトを要求します.
    単例を書く
  • (id)defaultManager{ static ClassName *name = nil; if (!name) { name = [[ClassName alloc] init]; } return name; }
  • (id)defaultManager{ static ClassName *name = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ name = [[ClassName alloc] init]; }); return name; }

  • 実際に開発した時にKVOを使ってクラッシュすることを知らせるのはどうやって解決しましたか?KVOを通知する際に観察者を除去する必要がある
    blockの実際のプロジェクトでのblockをコールバック関数として使用すると、エージェントの代わりにエージェントを書く代わりにblockで置き換えることができます(アップロード)
    怠惰なロードとは、使用時に怠惰なロードを作成することです.
    readwrite,readonly,assign,retain,copy,nonatomic,strong,weak属性の役割?strong(強引用)、weak(弱引用)を区別しますか?copy、assign、retainを使用する場合は?readwriteは読み書き可能な特性である.getterメソッドとsetterメソッドを生成する必要がある場合readonlyは読み取り専用プロパティですgetterメソッドを生成するだけで属性をクラス外で変更しないassign直接付与基本データ型retainは保有を表します(予約)プロパティリファレンスカウントに1 copyを加えて割り当て値をコピーすると、前のオブジェクトの影響を受けないオブジェクトnonatomic非原子操作が生成され、コンパイラが生成したsetter getterが原子操作であるかどうかを決定します.atomic原子操作はマルチスレッドセキュリティを表します.UI(プライマリ)スレッドnonatomic strong強参照->属性が属するオブジェクトが解放されたときにこの属性が解放されるweak弱参照->不安定な場合に解放される可能性があります
    -面接問題
    Objective-Cは私有の方法がありますか?プライベート変数は?もし多くないなら、何か代わりの方法はありませんか?objective-cクラスの中の方法は2種類しかなく、静的方法と実例方法である.しかし、方法の宣言と定義をすべて置くことができます.mファイルでは、表面的なプライベートメソッドを実現します.プライベート変数があり、@privateで修飾したり、宣言を置くことができます.mファイルにあります.Objective‐Cでは、すべてのインスタンス変数のデフォルトはプライベートであり、すべてのインスタンスメソッドのデフォルトはパブリックです.
    c c c++とobj-cはどのように混用しますか?1)obj-cのコンパイラは接尾辞mのファイルを処理する場合、obj-cとcのコードを識別することができ、mmのファイルを処理するとobj-c,c,c++のコードを識別することができるが、cppファイルはc/c++のコードしか使用できない必要があり、cppファイルincludeのヘッダファイルにもobj-cのコードは現れない.cppはcppにすぎないからである.2)mmファイルでcppを混用してそのまま使えばよいのでobj-c混用cppは問題ない3)cppでobj-cを混用するのはobj-cで書かれたモジュールを用いることが望ましい.モジュールがクラスで実装されている場合は、cpp classの標準に従ってクラスの定義を書く必要があります.ヘッダファイルには、#import cocoaを含むobj-cのものは表示されません.実装ファイルでは,クラスの実装コードにobj-cを使用できるもの,import,接尾辞がmmである.モジュールが関数で実装される場合、ヘッダファイルはcのフォーマットで関数を宣言し、実装ファイルではc++関数内部でobj-cを使用することができますが、接尾辞はmmまたはmです.まとめ:cppファイルとcpp includeのファイルにobj-cのものが含まれていなければ使えますが、cpp混用obj-cの鍵はインタフェースを使うことで、実装コードを直接使うことはできませんが、実際にcpp混用はobj-cコンパイル後のoファイルで、これは実は無差別なので使えます.obj-cのコンパイラはcppをサポートします.
    Objcメリットとデメリット---OCの特徴:idタイプ、動的objcメリット:1)Cateogies 2)Posing 3)動的認識4)指標計算5)弾性メッセージ伝達6)過度に複雑なC派生言語ではない7)Objective-CとC++のハイブリッドプログラミングのデメリット:1)ネーミングスペースを支援しない2)演算子のリロードをサポートしない3)多重継承をサポートしない4)動的実行時タイプを使用するすべてのメソッドは関数呼び出しなので、多くのコンパイル時に最適化メソッドが使用されません.(インライン関数など)、性能が劣る.
    Archiverシーケンス化アーカイブcoding:NSKeyedArchiver NSKeyedUnarchiverは何ができますか?キャッシュしてデータを保存するオブジェクトがアーカイブをサポートしていない場合、どのようにアーカイブのカスタムアーカイブ書き換えをサポートするか-(void)encodeWithCoder:(NSCoder*)aCoder;
  • (nullable instancetype)initWithCoder:(NSCoder *)aDecoder;

  • 浅いレプリケーションと深いレプリケーションの違いは?浅いレプリケーション(copy):参照オブジェクト自体をレプリケーションせずに、オブジェクトを指すポインタのみをレプリケーションします.//オブジェクトのポインタによってこのオブジェクトにアクセスする--割り当てアドレスのみの深層コピー(mutableCopy):参照オブジェクト自体をコピーする---もう1つのオブジェクトを作成するAオブジェクトを意味し、1部コピーしてA_を得るcopyオブジェクトの後、浅いコピーの場合、AとA_copyは同じメモリリソースを指しています.コピーされたのはポインタにすぎません.オブジェクト自体のリソースは1つしかありません.もし私たちがA_copyが修正操作を実行すると、Aが参照したオブジェクトが同じように修正されていることがわかります.これは、コピーをコピーする考えに反しています.深くコピーすればわかりますが、メモリには2つの独立したオブジェクト自体が存在します.//Aを修正すると、A copyは変わりません.
    便利なコンストラクタ+(id)Person{Person*person=[person alloc]init];return person;}カスタムコンストラクションメソッドは、コピーがサポートされていないオブジェクトをどのようにコピーしてこのクラスにコピープロトコル(NSCoping NSMutableCoping)を追加し、コピープロトコルを実装するか-(id)copyWithZone:(nullable NSZone*)zone
  • (id)mutableCopyWithZone:(nullable NSZone *)zone

  • どのようにKVCを通じてあるクラスの中のオブジェクトの中のオブジェクトの属性の値にアクセスしてキーの経路の方式を通じてsetVaule forKeyPath:キーの経路は通過します.キーの階層類似表現パスを区別する/
    データ永続化ストレージ方式にはどのようなものがありますか?および特徴1.plistプロパティリスト最外層は配列辞書にしか記憶できないbool NSNumber String Data Date 2しか記憶できない.NSUserDefaultは、最終的にはplistシステムにカプセル化された保存経路に保存する方法でもある.アーカイブは、データを保存するファイルを暗号化することができる.sqliteリレーショナルデータベースは、テーブル形式でFMDBを格納OCにおけるsqlite操作をカプセル化するサードパーティライブラリである.CoreDataはアップルがカプセル化したファイル操作のフレームワークで、下位データファイルをオブジェクト形式で格納できます.sqliteタイプでもXML JSONでも...