Obj.C

Obj.C:NSStringを修正

2012年末に書かれたApple社の「Objective-Cによるプログラミング」というドキュメントに、可変オブジェクトを処理するのであれば、メモリリーク回避のためにNSStringよりもNSMutableStringを使うべきだという指摘がありました。それで、まずこの修正から始めることにしました。

▶︎修正前:NSString

NSString *mcReadBuffer;

mcReadBuffer = @””;
mcReadBuffer = [NSString stringWithContentsOfURL:url   encoding:4     error:nil];

▶︎修正後:NSMutableStirng

NSMutableString *mcReadBuffer;

mcReadBuffer = [[NSMutableString alloc]initWithFormat:@””];
mcReadBuffer = [[NSString stringWithContentsOfURL:url   encoding:4     error:nil]copy];

  • 補注1: [mcReadBuffer setString:@””];だとOKな行と暴走する行があり、不安定なので上記のように修正しました。
  • 補注2: 読み込みも、copyをつけるとうまく行きました。理由は正確にはわかっていません。

▶︎メソッドに引数を設定して共通モジュール化

これまでは、深く考えないでとりあえず動けばいい方式で進めてきたのでこの考えを改め、共通化できるものはパラメタ渡しにして共通化を図ることにしました。

  • テスト用にメソッド開始をNSLogで出力しています。これはメソッド名と出力をするかしないかをパラメタで渡せばすむことなのでそうしました。出力有無はtstLogのYES/NOで判定します。
    -(void)logStart:(NSString *)tstName tstLog:(NSString *)tstLog
  • ファイルダンプも同じようにパラメタ渡しに変更して呼び出すことにしました。出力有無はtstSize>0で判定します。
    – (void)LogDumpBuffer:(NSString *)tsBuffer tstSize:(NSInteger)tstSize tstName: (NSString *)tstName
  • こうした修正は全般に渡ります。そのためいろんなところから呼ばれることになると返ってわかりにくくなってしまうかもしれません。共通モジュールにしたとき、通常、安心・安定のはずですが、機能の切り出しが返ってわかりにくさを増長することはよくあることですからね。
  • ひとつだけ、.xib(mib)を操作する場合、パラメタ渡しがうまくいかなかったので、これだけは直接いじることにしました。
  • アップしたMesaClip 5.5を修正していたので、このまましばらくアップした5.5を直接アップデートします。時々、動かなくなると思います。機能追加する前に、一旦、このような直接の修正はやめます。これは事故です。