我是有一定經驗的java開發人員。四年java,三年Android,至於為什麼要來學習IPhone我相信不需要我多說什麼。因為你懂的。學習IPhone對於我來說當然是小菜一碟,怎麼說呢 。首先IPhone的開發語言,objectie-c是一門物件導向語言,我可以類比java雖然內容不同,但思想卻是殊途同歸。如果一切能照搬java思想,通過類比,歸納,我相信,就算你不寫objective-c代碼,你也能看懂這些代碼,也能objective-c編程。但我想說,我們還是有必要花過一周時間去看看objctvie-c 為什麼呢,因為我們需要去瞭解他們基礎的api,它提供了那些方法,技術。等只有瞭解,熟練了,你才能更好的進行objective-c開發。其次,我們都知道,Android是抄襲IPhone,而且Android有的組件,IPhone幾乎都有,而Android沒有的組件IPhone也有,這樣我們在Android中需要自己重寫的組件,在IPhone中能直接使用,所以說IPhone比Android更簡單。而我本人也只打算在一個月的業餘時間內去掌握IPhone開發的相關技術。
推薦兩本書:《好學的Objective-c》和《IPhone應用程式開發入門與實戰》 這兩本書講的比較基礎,但內容還是比較豐富,各個知識點都比較到位,至於深入那是以後的事,先把基礎的高透,以不變應萬變 Objective-C速成: 前言:既然我們知道,obj-c與java的的思想有太多的相同點,所以我不可能花太多的時間去走常規路徑,去一點點的學習,我們主要是熟悉其中的思想,然後把obj-c的API掃一遍就行了,知道有什麼方法,所以我想從java方面下手:打比方java下面有那些基礎的呢:文法,運算,物件導向,集合架構,線程,I/O,網路通訊,資料庫,泛型,註解,反射等:那麼我猜:obj-c也會與這些相關的東西差不多,只要兩種語言提供的思想一致,那肯定是殊途同歸。就算略有不同,但我們把主線抓住了,偏差的也不會太多。好了,不說其它廢話:Objective-C語言特點:1.物件導向:封裝,繼承(只支援單繼承與java一樣),多態2.方法聲明:需要在方法前面加“-”字元,變數與方法名之間用“:”符號如 -(IBAction)changeNumber:(id)sender; IBAction是輸出的資料類型,changeNumber是方法名,“:”後面是輸入的參數資訊,“id”是輸入的參數的資料類型,sender是輸入的變數,如果沒有輸入 參數“:”及其後面聲明都可以去掉 如:-(int)getNumber3.如id something,當不知道something的資料類型可以使用id,id會在運行時動態決定(也叫動態綁定)4.Int與NSNumber:一個是整數資料類型,一個是對象資料類型,好比java中的int與Integer。 轉換:轉換成NSNumber對象 +(NSNumber *)numberWithInt:(int)value, 擷取NSNumber值:-(int)intValue;5.nil可以為空白:比如: 判斷:if(member==nil) return; 等價於:if(!member) return; 賦值:member==nil; [member setCollege:nil]; 對象可以為空白(與java不同,如果你調用java的一個null對象方法,會報錯),所以你不用在調用方法前預先檢查該對象是否為空白:member=nil;[member getFree]6.BOOL:布爾值:值為YES/NO 或1/0,YES或1代表真, 定義布爾值:BOOL enable = NO;enable = 0; 判斷布爾值:if(enable==YES)…或if(enable)…7.NSData;NSMutableData:存放位元據的資料類型(類),8.NSDate,NSCalendarDate:存放日期的資料類型(類)9.Objective-C類是所有類的基類,如java中的objecte10.使用者自訂類:如(Company *)company;11.方法: 使用“-”的方法叫執行個體方法,使用“+”叫類方法(我的理解是:當聲明一個變數你可以直接使用這個方法,而不需要執行個體化,同java中的靜態方法,可以直接調 用)在聲音時使用“+”比如:NSArray數組上的聲明數組方法就是一個類方法: +arrayWithObjects(id) firstObj,…//後面是各個數組元素,以nil結束 還有一個與java/C++完全不同的格式是第二個參數聲明。我們先來看一例子,這是一個school類的註冊課程方法:參數包括課程名稱和學生名稱: -(void) enrollClass(NSString *) className student:(NSString *)student; 比較怪異的是第二個參數,它前面有一個類似方法的聲明(student:)可以這樣調用: [school enrollClass:@”IPhone” student:@“king”]; 第二個參數要帶上聲明時的名稱(student:)我們把方法理解為訊息,把類理解為接收訊息者,把方法的參數理解為訊息的參數,那麼上面的enrollClass方法 就有兩個訊息(enrollClass和student),或者,為了簡單起見,你就認為方法聲明中的第二個(或者更多)參數聲明的前面要加上“參數名:”,調用時也加 上:“參數名: ”。12.
字串NSString
聲明: NSString *address = @”welcome to shenzhen”; 格式化: NSString *name = @“king-IPhone”;NSString *log = [NSString stringWithFormat:@”I am ‘%@’”,name]; 使用“%@”來表示一個字串的值。另外使用%d可以表示一個整數,如下: Number.text = [NSString stringWithFormat:@”%d”,sliderValue]; 追加字串:NSString *address = @“welcome come to shenzhen”;NSString *word = [address stringByAppendingString:@”do IT”];字條串的比較與判斷:-(BOOL)isEqualToString:(NSString *) string;//比較兩個字串是否相同-(BOOL)hasPrefix:(NSString *) string;//開頭字元的判斷-(int)intValue;//轉換為整數值-(double)doubleValue://轉換為double值。執行個體:NSString *name = @”king-IPhone”;NSString *age = @”36”;If([name hasPrefix:@”king”]){…}If([age intValue]>30){…}同java類似,NSString本身不能修改:如果需要修改字串的話,可以使用NSMutableString.NSMutableString提供了附加字串的方法:-(void)appendString:(NSString *)String;- (void) appendFormat:(NSString *)string;執行個體:NSMutableString *name = [NSMutableString new];[name appendString@”king”];13.調用方法的格式:
其格式為(參數名可以省略):[類名 方法名:參數1 參數名:參數2.。。]Number.text = [NSString stringWithFormat:@”%d”,sliderValue];輸入的第一個參數是格式,第二個參數是滑動條的數值。上述調用方法的語句(整個[…])稱為訊息運算式(Message Expression),其中“方法名:參數”稱為訊息(Message),”方法名:”稱為選取器(selector),你可以把選取器理解為指向方法的指標。Objective-c2.0開始支援點格式,同java/C++中的“。”格式,如:讀取值時:Int age = [member age]; ==?int age = member.age;設值時:[member setAge:36] =?member.age= 36另外,“[]”的方法調用允許方法嵌套,如下:[[member child] setAge : new Age]; ==>member.child.age = newAge但是,點格式有一個限制,只限於一個參數,如果有多個參數,就不能使用點格式了。還有兩點:Objective-c是動態啟動並執行,方法是在運行時綁定的。
14.選取器:SEL
在Obj-c中SEL是選取器的資料類型:比如:“SEL action = [button action]”-(void)setTarget:(id)target;-(void)setAction:(SEL)action;下述語句設定了一個button對象上的Action為“@selector(start:)”調用start方法:[button setAction:@selector(start:)];如果你的方法有兩個參數(訊息)如:-(void)setName:(NSString *)name age:(int)age 就可以包含兩個訊息如SEL sel = @selector(setName:age:);有時在調用 Action時,你想判斷這個對象是否存在所指定的方法,那麼,你可以使用respondsToSelector來判斷如:Id obj;//指定target對象SEL sel = @selector(start:); //指定actionIf([obj respondsToSelector:sel]){//判斷該對象是否有指定的方法[obj preformSelector:sel withObject:self]//調用方法,後面是輸入參數}如果不存在這個方法,應用會停止。15.Objective-C類:Class類, Class theClass = [theObject class];//擷取theObject對象的class資訊NSLog(@”類名是%@”,[theClass className]);//記錄類的名字判斷某個對象是否為某個(包括子類)的對象(題外話,java的你知道嗎,類比一下)If([theObject isKindOfClass:[UIControl class]]){…} 如果不包括子類,可以使用:If([theObject isMemberOfClass:[UIControl class]]){…}NSObject(所有類的基類)-(NSString *)description //描述一個類的資訊數組(NSArray)和集合(NSSet)+arrayWithObjects:(id)firstObj,……//聲明數組,後面是各個元素,以nil結束;-(unsigned)count;//數組中的元素個數-(id)objectAtIndex:(unsigned)index;//指定位置的元素。-(unsigned)indexOfObject:(id)object;//對象在數組中的位置。執行個體:NSArray *city = [NSArray arrayWithObjects:@”北京”,@“上海”,@“湖州”,nil];If([city indexOfObject:@”杭州”]){NSLog(@“杭州不在其中”)}NSArray是一個靜態數組,不能往該數組動態添加元素,你可以使用NSMutableArray來動態管理數組,NSMutableArray是NSArray的子類,NSMutableArray常用的方法有。+(NSMutableArray *)array;//聲明一個數組(void) addObject:(id) object//添加一個元素(void)removeObject:(id)object;//從數組中刪除指定的元素(void)removeAllObjects;//刪除所有元素(void)insertObject:(id) object atIndex:(unsigned)index;//在指定位置添加新元素執行個體:NSMutableArray *city = [[NSMutableArray alloc] init];[city addObject:@”北京”];[city addObject:@”上海”];[city addObject:@”深圳”];[city removeObjectAtIndex:1];注意obj-c索引是從1開始的NSSet類實現了集合的概念,其方法有:+setWithObjects:(id)firstObj。。。://聲明集合,後面是各個元素,以nil結束。-(unsigned)count;//返回集合個數-(BOOL)containsObject:(id)object;//判斷指定對象是否包含在集合中同數組類似,NSSet本身也是一個不可修改的集合,NSMutableSet是相應 可以修改的集合。方法有:+(NSMutableSet *)set;//聲明一個集合-(void)addObject:(id)object;//添加一個元素到集合中-(void)removeObject:(id)object;//從集合中刪除一個元素。-(void)removeAllObjects;//刪除集合中的所有元素-(void)insersectSet:(NSSet *)otherSet;//兩個集合的交集-(void)minusSet:(NSSet *)otherSet;//所有不在指定集合中的元素NSDictionary (索引值對的集合)+dictionaryWithObjectsAndKeys:(id)firstObj,…//聲明一個字典,以nil結束。-(unsigned)count;//擷取字典中“鍵-值”對的個數-(id)objectForKey:(id)key;//尋找某個鍵所對應的值,如果不存在,返回nil執行個體:NSDictionary *employees = [NSDictoinary dictionaryWithObjectsAndKeys:@”曹操”,@“1”,@“劉備”,@“2”,@“孫權”@“3”,nil]; //注意鍵在前,值在後。NSString *firstEmployee = [employees objectForKey:@”1”];修改NSDictionary要用NSMutableDictionary來動態添加/刪除元素。方法有:+(NSMutableDictionary *)dictionary;//聲明一個動態字典-(void)setObject:(id)object forKey:(id)key;//設定值和鍵-(void)removeObjectForKey:(id)key;//刪除鍵所指定的對象-(void)removeAllObjects;//刪除所有對象。執行個體:添加一組索引值對。NSMutableDictionary *employees=[[NSMutableDictionary alloc] init];[employees setObject:@”趙雲” forKey@”4”]枚舉訪問:方法一:NSArry *array = …//Member *member;Int count = [array count];//擷取會員數組For(I = 0;i<count;i++){Member = [array objectAtIndex:i];//對於每個會員NSLog([member discription]);//在日誌中記錄會員的描述資訊}方法二:For(Member *member in array){NSLog([member description]);}