ハロの外部記憶インターフェイス

そろそろ覚える努力が必要かも…

Objective-Cのクラス・メモリ管理

メソッドの種類

  1. クラスメソッド

JAVA,.NETのstaticメソッドと同様、クラスいんんスタンスを生成しなくても使えるメソッド

+ (id) stringWithFormat: (NSString *) format
  1. ファクトリメソッド

クラスのインスタンスを生成する為のメソッド
一般にnew等、MakeConn....などの使い方をするメソッド。書き方はクラスメソッドと同じ

  1. インスタンスメソッド

一般に使うメソッド、インスタンスを生成してから、そのインスタンスを元として呼び出されるメソッド

- (NSString) userid: 

NSString

- (BOOL) isEqualToString: *NSString *) aString;
  1. 使用例
NSString *thing1 = @"aaa";
if ([thing1 isEqualToString @"bbb"]) {
.... }
- (NSComparisonResult) compare: (NSString *) string;

NSException raiseを追加

DEBUG中にエラーが発生した部分で止める方法

  1. Xcodeブレークポイントウィンドウを開く
  2. グローバルブレークポイントを選択
  3. ブレークポイントに-[NSException raise]をセット
  4. objc_exception_throwを追加

文字列を分解し配列化

splitと同じ処理

  1. componentsSeparatedByString:を使用
NSStringg *string = @"oop:ack:bork:greeble:ponies";
NSArray "chunks = [string componentsSeparatedByString: @":"];

配列を区切文字列を挿入した文字列にする

componentsJoinedByString:を使用

string = [chucks componentsJoinedByString: @","];

結果:"oop,ack,bork,greeble,ponies"

Mutable変数

メンバーを追加したり削除できle変数形

  1. NSMutableString
    1. stringWithCapacity
    2. appendString
    3. appendFormat
    4. deleteCharactersInRange
  2. NSMutableArray
    1. arrayWithCapacity
    2. addObject
    3. removeObjectAtIndex

削除オブジェクトの後ろに有るし全ての要素は、穴を埋めるためシフトされる

  1. NSDictionary
    1. dictionaryWithObjectAndKey
    2. objectForKey
    3. dictionaryWithCapacity
    4. setObject
    5. removeObjectForKey

配列の繰り返し処理

  1. NSEnumeratorを使用
NSEnumerator "enumtor
enumtor = [array1 objectEnumerator];

id thing;
while (thing = [enumtor nextObject]) {
... }
  1. ForEachの様に使う方法

NSEnumeratorより高速である

for (NSString "string in array1) {
... }

Objective-Cのメモリ管理

  1. retain, dealloc, release
  2. alloc,new,copyを行った場合は必ずreleaseを認識来する事
  3. AutoreleasePool

自動解放処理は完璧ではない為、必要によってプールるを再設定するなり、工夫が必要である

{
NSAutoreleasePool *pool;
pool = [[NSAutoreleasePool alloc] init];
.....
[pool release];
}
  1. Garbage Collection
    1. Xcodeの[プロジェクト情報]ウィンドウの[ビルド]タブに行きObjective-C Garbage Collectionを[Required]にセットする

テキストフィールドの値を渡す場合は必ず「copy」を使う

テキストフィールドから手に入れた文字列は、一般にミュータブルな文字列はである為、
ユーザーが新しい文字列を入力すると変わってしまう。
引数として渡される文字列も同じく、ミュータブル文字列の場合、値が変わらない様に「copy」を使用する

- (void) setName: (NSString *) newName {
  [name release];
  name = [newName copy];
}