Operation
- 取得class資料的相關變數
12345678910Class me = [obj class];NSString * name = [obj className];//判斷是否繼承於UIViewif( [ obj isKindOfClass:[UIView class] ] ){NSLog(@"obj繼承於UIView");}//判斷是否是這個class的實體if( [ obj isMemberOfClass: [NSString class] ] ){NSLog(@"obj的類別是NSString");} - 確認兩個變數指向同一個記憶體位置
1if(obj1 == obj2) {}
確認兩個實體的值相同
1if([obj1 isEqual: obj2]){//使用者可自行在class裡面新增此一函數,來決定該如何判別兩個類別相同} - 呼叫物件的描述,回傳字串 [obj description];//等於NSLog(@”%@”,obj);
Delegation
- 定義:物件要完成某件行為時利用別人定義好的某項功能來完成。
所以專案第一個被呼叫的應該是Delegate裡的
1- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions - xcode專案的main.m
1234567891011121314#import ㄑUIKit/UIKit.h;#import "AppDelegate.h"int main(int argc, char *argv[]){@autoreleasepool {//argc:在argv裡元素的個數,通常對應main的參數//argv:一串輸入值//UIApplication或其子類別實體的class name,如果值是nil則會認為是UIApplication。// NSStringFromClass([AppDelegate class] 系統做完事後要通知誰return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));}}
基本類別
- NSObject:最基本的物件
[obj className];//自我檢視
[obj isEqual:obj2]//物件比較 - NSString
1234567891011[NSString stringWithFormat:@"It is %@",@"Tom"];//格式化字串//常用methodstr=[str stringByAppendingString:"abc"];//加字串在尾端,會回傳strstr=[str stringByAppendingFormat:"name %@",@"Tom"];//加格式化字串在尾端,會回傳strBOOL equ = [str isEqualToString:str2];//字串相同//比較兩字串相同的方法if([str compare:str2 options:NSLiteralSearch]){}if([str idEqualToString:str2]){//字串搜尋NSRange range = [str rangeOfString:str2];NSLog(@"str2位於str1的第%d的位置,長度為%d",range.location,range.length); - NSMutableString:可在原本字串之間插字串(用insertString)
1234NSMultableString *str = [NSMultableString string];[str appendString:@"test"];[str insertString:@"hello" atIndex:1];NSLog(str);//ThrlloEST - Set:無順序性的集合,資料有惟一性(物件要比較是否相同須覆寫isEqual和hash)
NSMutableSet:queue的概念,用在List把移出畫面的東西暫存。
NSOrderedSet:依照加入的順序排(比起NSMutableSet)
相關網頁:
http://stackoverflow.com/questions/6545722/help-with-isequals-and-hash-in-iphone - Array:有順序性的集合,當資料從中間刪除,剩的index會自動往前補。
NSArray: 不可新增修改的array。
NSMutableArray:可新增修改,保證是0,1,2,3的index不會跳號。 - Dictionary:存在key-value型式資料的集合
NSDictionary和NSMutableDictionary - 走訪所有元素的寫法
123for(NSString *ele in array){NSLog([ele description]);} - NSNumber:才可以丟進set或array裡
- NSNull:為了要丟進array裡面,因舊式寫法array宣告nil代表尾端,所以要丟空值要改丟NSNull
- Scalar:把物件當陣列般存取。例:
1234567Car * car = [car new];car[1] = @"name"; //寫入scalarNSLog(@"%@",car[1]);//讀取scalarcar[@"dict"] = @"value";//寫入objectNSLog(@"%@",car[@"dict"]);//讀取object
要注意的是,如果我們呼叫car[1]代表執行下面兩個函數而不代表真的是array
123456- (id) objectAtIndexedSubScript:(NSInteger) index {return @"Car";}-(void) setObject:(id)thing atIndexedSubscript:(NSInteger) index{//在此設定index為index的值為thing}
如果果們呼叫car[@”dict”]則是執行下面兩個函數
123456-(id) objectForKeyedSubscript:(id)key{return @"dict";}-(void) setObject:(id) thing forKeyedSubscript:(id<nscopying>) key{//在此做設定}