LoginSignup
7

More than 5 years have passed since last update.

自動生成されたプロパティのアクセサにブレークポイント

Posted at

今更感が強いですが、Objective-Cはまだまだ現役です!

自動生成されるプロパティ

最近のObjective-Cの常識では、特別な処理を行わないプロパティの実装はコンパイラ任せにするのがよいとされています。

こんな感じですね。

ClassA.h
#import <Foundation/Foundation.h>

@interface ClassA : NSObject

@property (copy) NSString *name;

@end
ClassA.m
#import "ClassA.h"

@implementation ClassA

@end

ブレークポイントはどこに設定すればいいの?

自動生成されたプロパティへ誰がアクセスしたのかを確かめたい。そのためにブレークポイントを仕込みたいけどどこに仕込めばいいか分からない。仕方がないから自分でアクセサを書く。そんなことはないでしょうか?
実は何も書かなくてもここにブレークポイントが仕込めます。

スクリーンショット 2016-04-05 20.25.40.png

プロパティの宣言部にブレークポイントを仕込めば、setter, getter双方にブレークポイントを仕込んだことになります。
問題解決ですね。

setterだけでいいんだけど...

setterを確認したいだけでgetterはどうでもいい。というか、いちいちgetterで止まられると頻繁に止まりすぎてデバッグにならない。

そんな時は、setterだけにブレークポイントを仕込みましょう。
ポイントはアクセサは自動ではあるけど実装されている、ということです。

このようにすればブレークポイントが仕込めます。

ブレークポイント ナビゲータのブレークポイントの追加から「 Add Symbolic Breakpoint...」を選び、
全画面_2016_04_05_20_28.png

setterのシンボルを入力します。今の場合は-[ClassA setName:]です。
スクリーンショット 2016-04-05 20.29.45.png

無事に、setterだけでブレークしました。
スクリーンショット 2016-04-05 20.30.17.png

まとめ

自動生成されるプロパティはちゃんと生成されている!

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7