iOSの面接問題について

5464 ワード

(id)データ型:1、オブジェクトに*番号2を必要としない、存在するメッセージを送信できる3、使用できない.属性4、特定のタイプにかかわらず、任意のクラスのオブジェクトを指すことができる
KVCとKVO kVCキー値符号化属性名をkeyとすることで属性の値を変更するKVOキー値観察者はKVCで属性をkeyとすることで属性値の変化を観察する応答観察者を除去する
単一の例(1つのクラスのオブジェクトは1回しか使用できません)オブジェクトを1回だけ作成することで、メモリコストを節約する使用環境の重複作成を回避できます.重複作成を必要としない操作クラスで、データベース・ネットワークをカプセル化して、使用時に他のオブジェクト(現在のユーザー)の1つのインスタンスとして作成したくない固定オブジェクトを要求するライフサイクルです.(プログラム開始からプログラム終了まで)
単例を書く
//  
static User *user = nil;

@implementation User

+(id)defaultManager{
    @synchronized (self) {
        if (user == nil) {
            user = [[User alloc]init];
        }
    }
    return user;
}

+(instancetype)allocWithZone:(struct _NSZone *)zone{
    if (user == nil) {
        user = [[User alloc]init];
    }
    return user;
}
static HTTP_Manager_Delegate *manager=nil;

//                 
static dispatch_once_t onceToken;

//              onceToken     
dispatch_once(&onceToken, ^{
    //       
    manager = [[HTTP_Manager_Delegate alloc]init];
});
//     return
return manager;

@classは1つのクラス名を宣言するだけで、クラスの完全な宣言はループに含まれる問題を解決することはできません.2つのクラスファイルにループ依存関係(A参照B、B参照A)がある場合、@classを使用する必要があります.
importと#include
importはObjective-Cインポートヘッダファイルのキーワードであり、あるファイルの内容を完全に含む
自動的にインポートされ、繰り返しインポートされません.クロスコンパイルは開始されません.
include
C/C++インポートヘッダファイルのキーワードは、あるファイルの内容を完全に含むとクロスコンパイルが発生します.Objective-CではC/C++とObjective-Cが混在する問題があり、#includeでヘッダファイルを導入するとクロスコンパイルが発生するためです.
import<>とimport"<>:システムに付属するヘッダファイルへの参照に使用されるシステムファイルを参照し、コンパイラはシステムファイルディレクトリの下でファイルを検索します.
「」:ユーザー定義のファイルは二重引用符で参照され、コンパイラはまずユーザーディレクトリの下で検索し、インストールディレクトリで調べます.
ネットワークリクエスト:まずインタフェースが必要で、request(キャッシュ方式の設定、リクエスト時間)が必要で、サーバに接続し、データを要求し、解析する必要があります.
AFNのフルネームはAFNetworkingで、NSURLConnectionの1層のカプセル化に対してそれの運行効率はASIより高くなくて、しかしASIより簡単にそれを使ってプッシュを実現して、1つのインタフェースを要して、カプセル化パラメータ(辞書)、managerは要求フォーマットを設定して、post/get要求
get/post区別get:urlはパラメータとカプセル化され、長さ制限があり、安全係数は低いpost:urlはパラメータと分離され、長さは制限されず、安全係数は高い
block作用:1、コードを保存します.1つのコードは適切な時間に実行される(要求が成功したときにプロンプトボックスがポップアップされる).2、blockは一般的に2つのクラスのデータ逆伝達(ニックネームを変更するとき)3、blockは1つの操作をパラメータとしてコールバック関数として伝達することができ、エージェントに代わることができる.注意:コードブロックで外部のローカル変数を変更する場合は、__を使用します.blockまたは_weak修飾、さもないと崩壊します.
循環参照:strong weak
delegateはassign、weakでweakを使用して、野ポインタを避けることができます(オブジェクトは解放されましたが、メモリは解放されていません)
UITableViewの再利用メカニズム?
tableViewでインタフェースが詰まったり、上下にスライドしてカートン現象が発生したりした原因は?1、再利用メカニズムを使用していない;2、cellをスライドする時、時間のかかる操作があり、メインスレッドをブロックする(UIを更新することしかできない)
マルチスレッド:時間のかかる操作を処理し、ユーザー体験を増やすマルチスレッドには?NSThread:スレッドを開き、NSOperationを手動で管理する必要がある:スレッドキューが必要であり、依存関係を追加することができる.GCD:NSOperationは、GCDのパッケージ1に基づいています.GCDは、マルチコアの並列演算のためのソリューションを提案しています.2」GCDは、デュアルコア、クアッドコア3などのCPUコアを使用して、スレッドのライフサイクルを自動的に管理します.(スレッドの作成、タスクのスケジュール、スレッドの破棄)4)プログラマーは、GCDが実行したいタスクを伝えるだけで、スレッド管理コードを記述する必要はありません.
  • 1、作成ビュー
  • 2、シリアルキュー
  • を作成する
  • 3、シリアルキュー内のタスク
  • を非同期で実行する
  • 4、ネットワークリソースのロード
  • 5、メインスレッド
  • に戻る
  • 6、UI実行キューを更新する4つの方法:シリアル同期シリアル非同期パラレル同期パラレル非同期
  • データ持続性
    一般的なデータ永続化方式は、属性リスト(plistファイル)、アーカイブ(カスタムクラスのオブジェクトを格納する場合;ユーザのデータ(ニックネーム、uid))、プリファレンス設定(NSUserDefault(簡単なデータ(ユーザの設定を格納する場合))、sqlite 3、core data、FMDB(大量データの場合)create table student IF NOT EXISTS(id integer,name text,age text)
    少量の基礎データ型のデータとNSArray、NSDictionaryを保存し、暗号化する必要がない場合、plistファイルを使用します.
    少量のデータを格納し、パスワードにログインしたり、取得したaccessTokenを格納したり、お気に入りや最近のアクセスなどのオブジェクトを格納したりするには、キー値を使用してアーカイブできます.
    設定を優先すると、プログラムに設定されているスイッチのBool値など、ユーザー設定情報を格納します.
    大量のデータを保存する必要がある場合、例えばオフラインでいくつかのデータをキャッシュする必要がある場合、データベースを使用する必要があります.sqlit 3はc言語のもので、使用するのは特に便利ではありませんが、FMDBはocでそのパッケージを使用するのが便利です.そのため、一般的な開発ではFMDBを使用します.
    VFL(Visualization Format Language)にはいくつのマーカーがありますか?
    VFL:Visual Format Language        
    H:    
    V:     
    |      
    -          
    -  -        
           
    [        ]                
    [        (                      )];   :()    
    H:|-50-[view1(>=100)]-50-|
    V:|-100-[view1(30)]
             :
    1.       autulayout    frame      ——>          frame
                          translatesAutoresizingMaskIntoConstraints   =NO
    2.        
    3.    
    
        
      :       100           100         100
      :       150         40
    
         
    H:|-100-[view(>=100)]-100-|
    V:|-150-[view(40)]
    

    プッシュプロセス:
    1、    APPID;
    2、   APP ID       (                )
    3、            
    4、                         deviceToken
    5、        deviceToken
    6、                                  
    7、        deviceToken              
    8、                    
    

    NSArrayとNSSetの違いは?
    NSSet :
    1、   、    ;   NSSet                   
    2、  anyObject       
    3、  NSSet      。  forin     
    4、  :   。
    5、    :
    
        Cell   ,               ,           
                  ,                 
    
    *NSArray
    1、   、       。                 
    2、  :    
    3、    :               (  tableView      ,                )
    4、       
    

    コレクション
    コレクションと最近は主にツールクラスを使用してデータを追加および削除し、データを保存する際にデータを書き換えるequaltoメソッド(コンピュータはメモリアドレスに基づいて比較されるため、メモリアドレスが異なる場合があるが、格納されたデータは確かに同じであり、一般的にデータの位置識別(例えばid値)に基づいて比較される)
    最近の場合は、前回のデータを削除し、新しいデータを追加する必要があります.検索でコントロールの編集と選択状態を記録する必要がある場合は、データモデルに適切な属性を追加し、データを利用してコントロールの状態を制御する必要があります.
    よくある問題はtableviewを使用するとリサイクルの問題が発生し、この問題はデータの値を使用して避けることができ、cellをロードするたびに、彼の状態はデータによって制御され、データはリサイクルの問題が発生せず、この問題も発生しない.
    ローカルピクチャをロードするにはどのような方法がありますか?
    1、imageNamed
    2、dataWithContentsOfFile
    3、  [UIImage imageWithContentOfFile:]   [image initWithContentOfFile:]
    

    これらの知識は私が整理した一部で、何か間違いがあれば、私たちが共に進歩していることを指摘してほしい.