よく必要そうになりそうな機能をまとめました。
覚えるまでのチートシートという感じで・・・。
文字列操作
NSString *str1 = @"あいうえお"; // 文字数 int len = [str1 length]; // 文字列連結 NSString *str2 = [str1 stringByAppendingString:@"かきくけこ"]; // 文字列を変更する場合 NSMutableString *str3 = [NSMutableString stringWithString:@"あいうえお"]; // 文字列をセット [str3 setString:@"ABCDE"] // 末尾に文字列を追加 [str3 appendString:@"さしすせそ"]; // 文字列比較 BOOL result = [str1 isEqualToString:str2];
配列の操作
// 配列の生成 NSArray *array = [NSArray arrayWithObjects:@"ab", @"cd", @"ef", nil]; // 要素数を取得 int arrCount = [array count]; // 要素を取り出す id obj1 = [array objectAtIndex:2]; id obj2 = [array lastObject]; NSArray *array2 = [array subarrayWithRange:NSMakeRange(1, 3)]; // 配列自体を変更する場合 NSMutableArray *mArray = [NSMutableArray array]; NSArray *fArray = [NSArray arrayWithObjects:@"ff",@"gg",@"ii",nil]; NSMutableArray *mArray2 = [fArray mutableCopy]; // 追加 [mArray addObject:@"ABC"]; [mArray insertObject:@"abc" atIndex:1]; [mArray replaceObjectIndex:1 withObject:@"XYZ"]; // 削除 [mArray removeObjectAtIndex:3]; [mArray removeLastObject]; // ループ処理 /* インデックス */ for (i = 0; i < [array count]; i++) { NSLog(@"index: %d, value: %@\n", i, [array objectAtIndex:i]); } /* Enumerator */ NSEnumerator *enumerator = [array objectEnumerator]; id obj; while (obj = [enumerator nextObject]) { NSLog(@"value: %@\n", obj); } /* 高速列挙 */ for (id obj in array) { NSLog(@"value: %@\n", obj); }
連想配列
// ディクショナリを生成 NSDictionary *dict1 = [NSDictionary dictionaryWithObjectsAndKeys: @"miro", @"name", @"red" , @"color", , nil]; // 要素を取得 id obj1 = [dict1 objectForKey:@"name"]; // キーを配列として取得 NSArray *kArray = [dict1 allKeys]; // 値を配列として取得 NSArray *kArray = [dict1 allValues]; // ディクショナリの要素数を取得 int dictCount = [dict1 count]; // 変更する場合 NSMutableDictionary *mDict = [NSMutableDictionary dictionary]; // 要素をセット [mDict setObject:@"miro" forKey:@"name"]; // 要素を削除 [mDict removeObjectForKey:@"age"]; [mDict removeAllObjects]; // ループ処理 /* インデックス */ NSArray *keys = [dict allKeys]; for (i = 0; i < [keys count]; i++) { NSLog(@"key: %@, value: %@\n", [keys objectAtIndex:i], [dict objectForKey:[keys objectAtIndex:i]]); } /* Enumerator1 */ NSEnumerator *objEnumerator = [dict objectEnumerator]; id obj1; while (obj1 = [objEnumerator nextObject]) { NSLog(@"value: %@\n", obj1); } /* Enumerator2 */ NSEnumerator *keyEnumerator = [dict keyEnumerator]; id key; while (key = [keyEnumerator nextObject]) { NSLog(@"key: %@, value: %@\n", key, [dict objectForKey:key]); } /* 高速列挙 */ for (id key in dict) { NSLog(@"key: %@, value: %@\n", key, [dict objectForKey:key]); } /* NSEnumeratorをループ */ NSEnumerator *enumerator = [dict objectEnumerator]; for (id obj in enumerator) { NSLog(@"value: %@\n", obj); }
テキストファイルの読み込みと書き出し
// 読み込み NSString* text; NSError* error; text = [NSString stringWithContentsOfFile:@"/Users/memememomo/text.txt" encoding:NSUTF8StringEncoding erro:&error]; if (text) { } else { NSLog([error localizedDescription]); } // 書き出し NSString* text = @"Cocoa programming"; NSError* error; BOOL result = [text writeToFile:@"/Users/memememomo/test.txt" atomically:YES encoding:NSUTF8StringEncoding error:&error]; if (result) { } else { NSLog([error localizedDescription]); }
オブジェクト指向
// インタフェースの宣言 @protocol Zukei @required // デフォ、実装必須 - (void) draw; - (void) paint; @optional // 実装必須ではない - (void) move; - (void) resize; @end // インタフェースの採用 @interface Maru : NSObject <Zukei> @end // どのクラスのオブジェクトか id obj = [[TestCls alloc] init]; // クラス名を取得する NSString *className = [obj className]; // あるクラスのオブジェクトか BOOL bool1 = [obj isMemberOfClass:[TestCls class]]; // インスタンスの生成の仕方 Class cls1 = [TestCls class]; Class cls2 = [obj class]; Class cls3 = NSClassFromString(@"TestCls")
セッター関数
#import <Foundation/Foundation.h> @interface MyClass : NSObject { NSObject *myObj; } - (NSObject *)myObj; - (void)setMyObj:(NSObject *)argMyObj; @end @implementation MyClass - (NSObject *)myObj { return myObj; } // セッターメソッド - (void)setMyObj:(NSObject *)argMyObj { if (myObj != argMyObj) { [myObj release]; myObj = [argMyObj retain]; } } - (void)dealloc { NSLog(@"dealloc called. release `myObj`."); [myObj release]; [super dealloc]; } @end int main(void) { NSObject *testObj = [[NSObject alloc] init]; printf("%d\n", [testObj retainCount]); MyClass *myCls = [[MyClass alloc] init]; myCls.myObj = testObj; printf("%d\n", [testObj retainCount]); [testObj release]; print ("%d\n", [myCls.myObj retainCount]); [myCls release]; return 0; }