Operation
- 取得class資料的相關變數
Class me = [obj class]; NSString * name = [obj className]; //判斷是否繼承於UIView if( [ obj isKindOfClass:[UIView class] ] ){ NSLog(@"obj繼承於UIView"); } //判斷是否是這個class的實體 if( [ obj isMemberOfClass: [NSString class] ] ){ NSLog(@"obj的類別是NSString"); }
- 確認兩個變數指向同一個記憶體位置
if(obj1 == obj2) {}
確認兩個實體的值相同
if([obj1 isEqual: obj2]){//使用者可自行在class裡面新增此一函數,來決定該如何判別兩個類別相同}
- 呼叫物件的描述,回傳字串 [obj description];//等於NSLog(@”%@”,obj);
Delegation
- 定義:物件要完成某件行為時利用別人定義好的某項功能來完成。
所以專案第一個被呼叫的應該是Delegate裡的- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
- xcode專案的main.m
#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
[NSString stringWithFormat:@"It is %@",@"Tom"];//格式化字串 //常用method str=[str stringByAppendingString:"abc"];//加字串在尾端,會回傳str str=[str stringByAppendingFormat:"name %@",@"Tom"];//加格式化字串在尾端,會回傳str BOOL 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)
NSMultableString *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 - 走訪所有元素的寫法
for(NSString *ele in array){ NSLog([ele description]); }
- NSNumber:才可以丟進set或array裡
- NSNull:為了要丟進array裡面,因舊式寫法array宣告nil代表尾端,所以要丟空值要改丟NSNull
- Scalar:把物件當陣列般存取。例:
Car * car = [car new]; car[1] = @"name"; //寫入scalar NSLog(@"%@",car[1]);//讀取scalar car[@"dict"] = @"value";//寫入object NSLog(@"%@",car[@"dict"]);//讀取object
要注意的是,如果我們呼叫car[1]代表執行下面兩個函數而不代表真的是array
- (id) objectAtIndexedSubScript:(NSInteger) index { return @"Car"; } -(void) setObject:(id)thing atIndexedSubscript:(NSInteger) index{ //在此設定index為index的值為thing }
如果果們呼叫car[@”dict”]則是執行下面兩個函數
-(id) objectForKeyedSubscript:(id)key{ return @"dict"; } -(void) setObject:(id) thing forKeyedSubscript:(id<nscopying>) key{ //在此做設定 }