【Console Application】ファイルとデータベース 293【学習記】
今回の概略
プロパティの setter,getter 内で 'self.自分' の場合、更に自分の setter,getter が呼ばれてしまい無限回廊へ落ちる模様😞
それを防ぐにはアンダースコアアクセスによる記述が必要みたい🤔
だけど `@property` で定義したプロパティの setter,getter を両方上書きした場合、アンダースコアアクセスの名前も自分で `@synthesize` で定義しなければならないみたい🙄
#学習記 #Objective_C
#EXC_BAD_ACCESS
#property #synthesize
前回の粗筋
EXC_BAD_ACCESS との戦いは続く…😞
対策
今回も EXC_BAD_ACCESS との戦いが始まるお…🙄
この記事は Swift だけど Xcode の吐くバイナリなので恐らくこれが合致してる挙動の方の EXC_BAD_ACCESS だと思う🤔
前回のエラーの画像を見る限り、このプログラムを読み込んで初期化する時に無限反復が起きてるっぽいかな🤔
関連記事からすると初期化をヘマって無限反復に陥って件の障害が発生しているのかと推測されるけど画像を見る限り入り口が NSString の isEqual になってるのよね…😑
うーん…本人以外だと Record と DBA が isEqual で呼び出してるけど………😑
もう TypeVal 全関数の初っ端にブレイク張ってどこが最初に掛かるか見るくらいしかわからんぽ😞
👇
おやおや?
以外や以外。ちゃんと init から始まってるお🤔
ただ Thread の情報を見る限りだと RecordElement での global 変数を初期化していて呼ばれているっぽい😑
諸悪の根源 global 😞
ありゃ、確かにここで使ってるわさ🤤
でもこれ、一応正しい動作してる筈なのよね😞
そう考えるとやっぱり TypeVal のどこか、よろしくない書き方になってるという事なんだけど…🙄
もう少しステップで進めてみるぽ😑
下手人発見😑
なんと、この行の setter の `self.value =` で setValue が呼ばれている🙄
はぁ…そりゃ無限呼出しになるわ😞
// 名前を設定する
- (void)setName:(NSString *)name
{
_name = name;
}
- (void)setCount:(NSUInteger)count
{
_count = count;
// セッターで行いたい好きな処理.
// ……
}
// 名前を設定する
- (void)setName:(NSString *)name
{
_name = name;
}
_人人人人人人人人人_
> アンダースコア <
> アクセスにしる <
 ̄Y^Y^Y^Y^Y^Y^Y^ ̄
まぁ、下手人発覚した時点でそうだろうなと思ったわのよ…😞
………
(全体の setter,getter を直す間)
………
大筋変更できたけど '_value' で文句言われてる😞
もしや予約語?🙄
🙄🙄🙄
これ、以前片方しか書かなくて怒られたから両方書いた記憶が有るんだけど…?🤬
ほらほらほらほら🤬
でも上の記事を見る限りだと synthesize 書けば良いってあるから読み書き上書きしたら synthesize 要るのかな…めんどいお😞
🙄
頑張って構造とか直したりしたけど、実はこの修正だけだったのでは…と思ったり思わなかったり…😞
まぁそれは AnalyzeArgs のオプションの方は構造を修正していないので動けばアンダースコアアクセスと synthesize のせいって事に😑
次回は
気を取り直して動作試験再開よ〜🤪
この記事が気に入ったらサポートをしてみませんか?