基本面接

6182 ワード

1.なぜObjective-Cはダイナミックな言語なのか.
ocはruntimeによって実現されるメッセージングメカニズムであり,動的に置換方法を追加することができる.Cのような従来の関数呼び出しではありません.クラスはocで動的に作成され、runtimeに基づいてselector、method、impなどを検出してバインドされます.いわゆるランタイムバインドです.
2.MVCとMVVMについて話しましょうか?
MVCは伝統的なモデル、view、controllerです.modelはデータモデルであり、viewはビュー表示を提供し、controllerはコントローラにデータ計算とビュー制御を提供する.MVCには、データ処理、ネットワーク要求、およびいくつかのビューロジックが含まれており、肥大化しすぎているため、MVVMが提案されている.MVVMにおけるモデルとviewはMVCにおけるviewとmodelと一致しており、viewとmodelの接着剤としてviewとmodelが多く出てきており、ここではデータの業務処理、ネットワークリクエスト等を行うことでコントロールの負担が軽減される.コントロールは単純にページロジックをロードして処理し、viewmodelとviewの関係をロードして処理することができます.
3.なぜエージェントはweakを使うのですか?エージェントのdelegateとdataSourceの違いは何ですか?blockとエージェントの違いは?
Weakを使用して循環参照を回避します.strongを使用すると、エージェントに従うこのクラスがエージェントを持ち、エージェントにもこのクラスを持つと循環参照になるため、weakを使用し、weakを使用して参照カウントを増やさず、強い参照がなくなり、参照カウントが0になった場合にも解放されます.delegate、エージェントは主にtableviewがスライドするときに何かをするなど、彼のいくつかの方法を実現します.Datasourceでは、tableviewが何行あるか、各行がどれだけ高いかなど、データソースには主にいくつかのデータが必要です.blockもエージェントも逆叙伝値です.違いはblockが便利で、実現を直接blockに書くことができることです.エージェントのようにプロトコルがプロトコルに従ってエージェントを指定してエージェントを実装することを宣言する必要はありません.
4.属性の本質は何ですか.どの部分が含まれていますか.属性のデフォルトのキーワードはどれらがありますか?@dynamicキーワードと@synthesizeキーワードは何に使いますか?
メンバー変数+setメソッド+getメソッド.readwrite,atomic.値タイプ:assign.参照タイプ:strong.@synthesizeはget、setメソッドを自動的に生成し、変数の名前を変更します.同時にget、setメソッドを同時に書き換えるには、手動で@synthesize name = _nameを追加します.@@dynamicはget、set、メソッドを自動的に生成しません.
5.NSStringはなぜcopyキーを使うのか、strongを使うと何か問題がありますか?
NSStringがstrongタイプを使用する場合、NSMutablesStringのような可変文字列をNSStringに割り当てると、可変文字列が値を変更すると、文字列も変更されます.これは、浅いコピーでメモリアドレスのみがコピーされているためです.copyを使用するとコピーされ、コピーコンテンツに新しいアドレスが割り当てられます.このように可変文字列が変更されると、文字列は変更されません.
6.自分が書いたオブジェクトにコピー機能を持たせるにはどうすればいいですか?
NSCopyプロトコルに従います.copyWithZoneメソッドを表示します.
7.IBOutlet修飾のUIViewにweakキーワードが適用される理由
xibでコントロールをドラッグすると親ビューのsubviewsに追加され、強い参照が付いているため、view関連付け時にweakを使っても解放されないことはありません.
8.nonatomicとatomicの違いは?atomicは絶対的なスレッドで安全ですか?どうして?そうでなければ、どうやって実現すればいいですか?
まず原子性にかかわる.原子力とは、AがBに送金すると、Aが1000、Bが1000、Bが1000増加し、停電などの特殊な状況が発生した場合、操作が同時にキャンセルされ、Aが少なくなってBが多くなっていない場合はありません.同時成功または同時失敗を原子性と呼ぶ.atomic、原子性、安全、効率が低い.nonatomicは、非原子性で、安全ではなく、効率が高い.通常はnonatomicが使用されます.通常、属性には原子性が必要ないためです.同時にatomicは読み書きの安全だけで、絶対にスレッドの安全を保証するわけではありません.ただ、原子性がより良いことでエラーを避けるには、スレッドロックが必要です.
9.プロセスとスレッドの違い同期非同期の違い?並列と同時の違いは?
プロセス、システム実行の総称.スレッド、プロセスの単位.同期して、現在のスレッドをブロックして、完成を待ってからスレッドの非同期を続けて、現在のスレッドをブロックしないで、新しい線のスレッドを切り開いて同時に行います
10.スレッド間通信?
主にスレッドでdispatch_に使用されます.async(dispatch_get_main_queue()は、メインスレッドに戻ってUIをリフレッシュする.
11.GCDのいくつかのよく使われる関数?
メインスレッドに戻る:dispatch_async(dispatch_get_main_queue()非同期スレッドの作成:dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0) GCD遅延:dispatch_after GCD 1回のみ実行:dispatch_onceタスクグループ:dispatch_group_t12.リソースの奪い合いを回避するためにキューを使用する方法
iosマルチスレッド——ロック
13.データ永続化のいくつかのシナリオ
plist userdefault NSKeyedArchiver coredata realm
14.appdelegateのいくつかの方法を話しますか?バックグラウンドからフロントまでどのような方法が呼び出されましたか?最初の起動で呼び出されたメソッドはどれですか?フロントからバックグラウンドまでどのような方法が呼び出されましたか?
d i d F i n i shLaunchingWithOptionsアプリケーションが起動しましたアプリケーションDidBecomeActiveアプリケーションを完全にアクティブにしますアプリケーションDidEnterBackgroundバックグラウンドアプリケーションWillEnterForegroundに入ります
15.NSCacheはNSDictionaryより優れている
NSCacheリソース不足時に自動的にメモリを解放NSCacheスレッドセキュリティ
16.Designated Initializerを知っていますか?それを使うときに何か注意すべき問題がありますか.
関数を初期化します.allocはメモリを割り当ててInitを使用して初期化します.
17.descriptionメソッドを実装するとどのような効果が得られますか?
NSObject独自の方法で、オブジェクトのメモリアドレスを印刷できます.印刷プロパティと必要な情報を書き換えることができます.
18.objcはどのようなメカニズムでオブジェクトメモリを管理しますか?
ARC、自動参照カウント.カウントが0のときにメモリを解放します.
19..blockの本質は何ですか?
blockの本質は匿名関数です
20.なぜブロックによって取得された変数をデフォルトで変更できないのですか?_blockは何をしましたか?
blockは、値アドレスではなく値コンテンツを取得します.だから修正できません.block修飾変数はblockにコピーされた値アドレスで、変更できます.
21.ループリファレンスの状況をシミュレートしますか?block実装インタフェースの逆転送はどのように実現しますか?
selfはblockを持ち、blockはselfを持ち、循環参照をもたらし、blockの前にweakSelfを宣言し、block内でweakSelfを使用すればよい.
22.objcは、あるオブジェクトにメッセージを送信するときに、何が起こったのですか.
オブジェクトのisaポインタに基づいてクラスオブジェクトidを見つけ、クラスオブジェクトのmethodListsメソッド関数リストとSELをクエリーし、見つからなかったらsuperClassに沿って親を探し、親methodListsメソッドリストでクエリーし、最終的に一致するSEL、call IMP(針関数を指す)を見つけます.
23.unrecognized selectorエラーはいつ報告されますか?iOSには、ここまで来ないようにするメカニズムがありますか?
ベースクラスNSObjectが見つからない場合は、NSObject内のメソッドを呼び出してエラーを報告します.メッセージ転送に関連します.全部で3歩です.ステップ1:resolove動的解析ステップ2:fast forwardingリダイレクトステップ3:normal forwardingリダイレクト
24.コンパイル後に得られたクラスにインスタンス変数を追加できますか?実行時に作成したクラスにインスタンス変数を追加できますか?どうして?
前者は後者ではいけない.class_を通ることができますaddvarとclass_addmethod追加.
25.runtimeはどのようにweak変数の自動nilを実現しますか?
weak変数が作成されたオブジェクトを指すと宣言した後.実際には作成オブジェクトのメモリアドレスをkeyとし,このオブジェクトを指すweak変数をすべてハッシュテーブルに格納する.オブジェクト参照カウントが0になると、deallocメソッドが実行されると、そのオブジェクトのメモリアドレスkeyに基づいてハッシュテーブルに対応するコンテンツが見つかり、空になります.
26.クラスに属性を追加すると、クラス構造体のどの要素が変化しますか?
instance_size:インスタンスのメモリサイズobjc_ivar_List*ivars:プロパティリスト
27.runloopは何をしに来たのですか?runloopはスレッドと何の関係がありますか?プライマリスレッドはrunloopをデフォルトでオンにしますか?サブスレッドは?
一般に,スレッドは一度に1つのタスクしか実行できず,実行が完了すると終了する.メッセージを終了せずにいつでも処理できるメカニズムが必要です.runloopは、ループが終了するまで「メッセージの受信-待機-処理」のループ内にある関数を提供しています.runloopとスレッドの関係:スレッドが常に実行されたい場合はrunloopが必要です.メインスレッドはデフォルトでrunloopを開きます.つまり、このrunloopは私たちのプログラムの実行を保証します.サブスレッドのデフォルトはオンではありません.取得できます.また、最初の取得時に作成できます.
28.runloopのmodeは何に使いますか?modeは何種類ありますか?
  • kCFRunLoopDefaultMode:AppのデフォルトMode、通常メインスレッドはこのModeの下で実行されます.
  • UItrackingRunLoopMode:インターフェーストラッキングModeは、ScrolViewトラッキングタッチスライドに使用され、インターフェーススライド時に他のModeの影響を受けないことを保証します.
  • UIInitializationRunLoopMode:Appを起動したばかりのときに入った最初のModeは、起動が完了すると使用されなくなります.
  • GSEventReceiveRunLoopMode:システムイベントを受け入れる内部Modeは、通常は使用できません.
  • kCFRunLoopCommonModes:これは占有されたModeであり、実際の役割はありません.

  • 29.NSTimerオブジェクトをNSDefaultRunLoopMode(kCFRunLoopDefaultMode)でメイン運転サイクルに追加した後、scrollviewをスライドしている間にNSTimerは動かなくなったのはなぜですか?
    nstimeオブジェクトはNSDefaultRunLoopModeの下でメッセージを呼び出しますが、scrollviewをスライドするとNSDefaultRunLoopModeモードはUItrackingRunLoopModeモードの下に自動的に切り替わりますが、nstimeが送信したメッセージに応答し続けることはできません.スライドscrollviewの下でnstimeのメッセージを呼び出す場合は、nsrunloopのモードをNSRunLoopCommonModesに変更できます.
    30.プロジェクト内のネットワークはどのように情報セキュリティをしますか?
  • https 2を使用する.転送しないでhash暗号化3を使用する.mac
  • をできるだけ持参してください.
    31.mainの前のプロセス?
    コンパイルしてloadメソッドを実行します.