前回、私たちはiOS の一般的な UI コンポーネントについて話しましたが、あなたはもういくつかの簡単な UI インターフェースを作成できるようになったでしょうか~
しかし、実践の過程ではバグに遭遇しないことは難しく、結果が期待通りに直接一致することも難しいです。この時、私たちはデバッグ機能を使う必要があります!
次に、『虾票票』から iOS シリーズ入門(4)——Xcode デバッグに入っていきましょう。
⚠️:このセクションに含まれるデバッグ技術は iOS 開発に限らず、ほとんどの IDE にこれらの機能が含まれています。
甘い:ブレークポイント関連#
ブレークポイントの追加#
ブレークポイントを追加するのは簡単で、コードの対応する行番号をクリックするだけです;ブレークポイントを削除するには、ブレークポイントマークを領域からドラッグアウトします。
条件付きブレークポイント#
右クリックしてブレークポイント - Edit Breakpoint を選択し、適切な Condition を入力します。そうすると、ブレークポイントに到達した時に、Condition に合致する場合のみブレークポイントがトリガーされ、コードの実行が一時停止します⏸️。
ブレークポイントで自動実行タスク#
右クリックしてブレークポイント - Edit Breakpoint を選択し、Action を追加します。例えば p cnt
(デバッグコマンドタイプ)を指定すると、そのブレークポイントを通過する際に cnt
変数が印刷されます。
下の Options にチェックを入れると、上記の Action を実行した後にコードの実行を続行し、一時停止しません。
ブレークポイントの無視#
右クリックしてブレークポイント - Edit Breakpoint を選択し、赤枠のように設定すると、最初のブレークポイントのトリガーを無視し、2 回目のトリガー時にのみ一時停止します。これは一般的に初期化を無視するために使用されます。
例外ブレークポイント#
ブレークポイントナビゲーションバーの左下に例外タイプのブレークポイントを追加できます。
例外が発生した場合、クラッシュを引き起こさず、クラッシュしそうな場所で一時停止します。この時、呼び出しスタックを明確に確認できます(詳細は次の小節で紹介します)、クラッシュの根源を特定します。
シンボルブレークポイント#
ブレークポイントナビゲーションバーの左下にシンボルタイプのブレークポイントを追加できます。Symbol を特定のタイプのメソッドに設定します。例えば - [UIViewController viewDidLoad]
と設定すると、そのクラスメソッドの一般的なブレークポイントが設定され、各呼び出しにブレークポイントを追加する必要がありません。
PS:参考Xcode の高度なデバッグ技術、知っていますか?—— 簡書
酸っぱい:呼び出しスタックの確認#
ブレークポイントに入ると、3 つの方法で現在の呼び出しスタックを確認できます。
ブレークポイントナビゲーションバー#
ブレークポイントナビゲーションバーエリアには、すべてのスレッドと各スレッド内のメソッド呼び出しスタックが表示されます。0 はスタックのトップメソッド、つまり現在のメソッドを示し、数字が大きいほど呼び出しが少ないです。
PS:上の図で省略されているメソッド 2~28 は iOS システムの底層を呼び出しています。iOS はオープンソースではないため、底層の呼び出しスタックを見ることはできません。
下部ツールバー#
下部ツールバーのプロジェクト名の部分には、ブレークポイントナビゲーションバーと同じ効果が表示されます。
デバッグエリア#
デバッグエリアでは、thread backtrace
コマンドを入力することで、現在の呼び出しスタックをテキスト形式で表示できます。
また、thread info [i]
コマンドを使用してスレッド i
の基本情報を確認することもできます。
PS:参考iOS の関数呼び出しスタックを印刷し、変数がどこで呼び出されているかを確認する——CSDN
辛い:3D ビュー階層のチェック#
アプリを使用しているとき、下部ツールバーの赤枠ボタンをクリックすると、アプリの現在の画面(下の図の左側のシミュレーター)の 3D ビュー階層(下の図の右側の 3D 図)を確認できます。
下部ツールバーを通じて、左から右へ、私たちは:ビュー階層間の距離を調整|切り取られたコンテンツを表示、制約を表示、ビューのモードを変更、背景を変更|2D/3D ビューを選択|ズーム|表示可能なビューの範囲を調整できます。
さらに、特定のレイヤーを右クリックし、オプションが下の図のように表示され、Reveal in Debug Navigatorをクリックすると、そのレイヤーがすべてのレイヤーの中でどの位置にあるかを確認でき、レイヤー間のネスト関係を明確にするのに便利です。
全体として、3D ビュー階層のチェックはUI の問題を確認するのに非常に適しています。
さて、短い時間はいつも短いものですが、今回の内容は非常に簡潔で実用的ではありませんか?特にブレークポイントに関するいくつかの高度なデバッグ技術。
👏あなたの助けになれば幸いです。コメントで交流を歓迎します!
来週またお会いしましょう#
私たちは再び『虾票票』アプリを見てみましょう:
見ることができるように、UI インターフェースの他に、これらの機能も含まれています:ネットワーク映画データの取得、下に引っ張って更新、上に引っ張ってもっと読み込む、ローディングインタラクションなど。これらの機能は実現するのが難しいのでしょうか?👀
もしかしたら実現するのは難しいかもしれませんが、それは重要ではありません。インターネット上には多くのオープンソースのサードパーティライブラリがあり、これらの機能はすでに実現されています。私たちはそれらを取得して使用するだけで済みます。
これが来週の話題です:CocoaPods——iOS 開発のサードパーティライブラリ依存管理ツール。
🎺お楽しみに。
——湖南は急に寒くなったので、深圳に避寒に行きます🚄
2021.10.9