自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

iPhone開發(fā)必備 Objective-C語言教程

移動(dòng)開發(fā) iOS
本文介紹的iPhone開發(fā)必備 Objective-C 語言教程,很詳細(xì)的介紹了內(nèi)容,在這也不多說,直接來看詳細(xì)內(nèi)容。

iPhone開發(fā)必備 Objective-C 語言教程是本文要介紹的內(nèi)容,直接進(jìn)入話題,Objective-C是Mac軟件開發(fā)領(lǐng)域最主要的開發(fā)語言。假如我們對(duì)面向?qū)ο蟮乃季S已經(jīng)C語言都很熟悉的話,對(duì)于我們學(xué)習(xí)Objective-C將會(huì)非常有用。假如我們對(duì)C語言還不熟悉的話,那我們需要學(xué)習(xí)一下C語言。

方法調(diào)用(Calling Methods)

為了能夠盡快上手,我們先來看一些簡單的例子。Objective-C語法里面基本的方法調(diào)用是這樣的:

  1. [object method];  
  2. object methodWithInput:input]; 

對(duì)象的方法可以返回值:

  1. output = [object methodWithOutput];  
  2. output = [object methodWithInputAndOutput:input]; 

我們也可以在類里面調(diào)用如何創(chuàng)建對(duì)象的方法。下面的這個(gè)例子里面,我們調(diào)用了NSString類的string方法:

  1. id myObject = [NSString string]; 

id的類型意味著myObject這個(gè)變量可以指向任意類型的變量。當(dāng)我們編譯這個(gè)應(yīng)用程序的時(shí)候,并不知道他實(shí)現(xiàn)的真實(shí)的類和方法。

在這個(gè)例子里面,很明顯這個(gè)對(duì)象的類型應(yīng)該是NSString,所以我們可以改一下他的類型:

  1. NSString* myString = [NSString string]; 

現(xiàn)在myString就是一個(gè)NSString類型的變量。這個(gè)時(shí)候假如我們?cè)噲D使用一個(gè)NSString沒有實(shí)現(xiàn)的方法時(shí),編譯器就會(huì)警告我們。

一定要注意在對(duì)象類型的右邊有一個(gè)星號(hào)。所有的Objective-C對(duì)象變量都是指針類型的。id類型已經(jīng)預(yù)先被定義成一個(gè)指針類型了。所以我們不需要再加星號(hào)。

嵌套消息調(diào)用(Nested Messages)

在許多編程語言里面嵌套消息,或者嵌套函數(shù)看起來就像這樣:

  1. function1 ( function2() ); 

function2的返回值被傳遞給function1當(dāng)輸入?yún)?shù)。在Objective-C里面,嵌套消息調(diào)用就像這樣:

  1. [NSString stringWithFormat:[prefs format]]; 

我們應(yīng)該盡量避免在一行代碼里面嵌套調(diào)用超過兩個(gè)。因?yàn)檫@樣的話,代碼的可讀性就不太好。

多參輸入的方法(Multi-Input Methods)

多個(gè)輸入?yún)?shù)的方法。在Objective-C里面,一個(gè)方法名可以被分割成幾段。在頭文件里面,就應(yīng)該這樣子來定義一個(gè)多輸入?yún)?shù)的方法:

  1. -(BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile; 

我們這樣來調(diào)用它:

  1. BOOL result = [myData writeToFile:@"/tmp/log.txt" atomically:NO]; 

參數(shù)不一定要給它命名。在運(yùn)行期系統(tǒng)里面這個(gè)方法真實(shí)的名字叫writeToFile:atomically:。

2、Accessors

在Objective-C里面所有的實(shí)例對(duì)象默認(rèn)都是私有的。所有在大多數(shù)情況下我們需要用accessors去讀取或者設(shè)置變量的值。有兩個(gè)語法都支持這樣的操作,這個(gè)時(shí)傳統(tǒng)的老的語法:

  1. [photo setCaption:@"Day at the Beach"];  
  2. output = [photo caption]; 

第二行的代碼其實(shí)并非直接去讀對(duì)象實(shí)例的變量。事實(shí)上它調(diào)用的是名叫caption的方法。在Objective-C里大多數(shù)情況下我們不需要給getters加get的前綴。

無論什么時(shí)候我們見到方括號(hào),其實(shí)我們都是向一個(gè)對(duì)象或者一個(gè)類發(fā)送了一個(gè)消息。

  1. Dot Syntax 

在Objective-C 2.0里面,新增加了一個(gè)"."操作的語法。在Mac OS X 10.5里面就使用了Objective-C 2.0語法:

  1. photo.caption = @"Day at the Beach";  
  2. utput = photo.caption; 

我們兩種方式都可以使用。但是在一個(gè)工程里面最好保持風(fēng)格一致,只使用某一種。"."操作只能夠被使用在setters和getters里面,而不能用在一般意思的方法上。

3、創(chuàng)建對(duì)象

主要有兩種方式來創(chuàng)建一個(gè)對(duì)象。第一種辦法像這面這樣:

  1. NSString* myString = [NSString string]; 

這是一種非常習(xí)慣性的風(fēng)格。在這種方式情況下,我們創(chuàng)建的是系統(tǒng)自動(dòng)釋放(autoreleased)類型的對(duì)象。關(guān)于自動(dòng)釋放類型autoreleased,我們以后會(huì)深入討論一下。然而在許多情況下,我們需要手動(dòng)的去創(chuàng)建對(duì)象:

  1. NSString* myString = [[NSString alloc] init]; 

這是一個(gè)嵌套的方法調(diào)用。第一個(gè)調(diào)用的NSString自己的alloc方法。這是一個(gè)相對(duì)比較底層的調(diào)用,因?yàn)樗麆?chuàng)建了內(nèi)容,以及實(shí)例化了一個(gè)對(duì)象。

第二塊代碼調(diào)用了新創(chuàng)建對(duì)象的init方法。這個(gè)init方法實(shí)現(xiàn)了比較常用的基本設(shè)置,比如創(chuàng)建實(shí)例對(duì)象的參數(shù)。對(duì)于一般開發(fā)人員而言,實(shí)現(xiàn)這個(gè)客戶的類的具體的細(xì)節(jié)并不清楚。

在一些情況下,我們可以用不通的初始化方式去賦初值:

  1. NSNumber* value = [[NSNumber alloc] initWithFloat:1.0]; 

4、基本的內(nèi)存管理

假如我們正在為Mac OS X開發(fā)一個(gè)應(yīng)用程序,我們可以選擇是否啟用垃圾回收機(jī)制。這就意味著我們不需要去考慮內(nèi)存管理,除了一個(gè)特別復(fù)雜的情形我們需要處理一下。

然而,我們有的時(shí)候我們的開發(fā)環(huán)境沒有垃圾回收機(jī)制,比如iPhone開發(fā)的時(shí)候就沒有垃圾回收機(jī)制。在這種情況下,我們就需要了解一些基本的內(nèi)存管理方面的概念。

假如我們手動(dòng)的通過alloc創(chuàng)建了一個(gè)對(duì)象,我們需要用完這個(gè)對(duì)象后release它。我們不需要手動(dòng)的去release一個(gè)autoreleased類型的對(duì)象,假如真的這樣去做的話,我們的應(yīng)用程序?qū)?huì)crash。

這里有兩個(gè)例子:

  1.  // string1 will be released automatically  
  2. NSString* string1 = [NSString string];  
  3. // must release this when done  
  4. NSString* string2 = [[NSString alloc] init];  
  5. [string2 release]; 

就這個(gè)教程而言,我們可以人為autoreleased對(duì)象會(huì)在當(dāng)前函數(shù)方法調(diào)用完成后被釋放。

當(dāng)然了,還有很多關(guān)于內(nèi)存管理的只是我們需要學(xué)習(xí),但是這需要我們了解更多的基本概念以后才能去涉及。

5、設(shè)計(jì)一個(gè)類的Interface

就Objective-C語言而言,創(chuàng)建一個(gè)類非常簡單。它非常典型的分成了兩個(gè)部分。

類的接口通常保存在ClassName.h文件里,它定義了實(shí)例的參數(shù),以及一些公開的方法。

類的實(shí)現(xiàn)在ClassName.m文件里。它包含了真正運(yùn)行的代碼和那些方法。它還經(jīng)常定義一些私有的方法。這些私有的方法對(duì)于子類是不可見的。

這里有一個(gè)接口文件的大概。類名Photo,所以文件名叫Photo.h:

  1. #import <Cocoa/Cocoa.h> 
  2. @interface Photo : NSObject {  
  3.     NSString* caption;  
  4.     NSString* photographer;  
  5. }  
  6.  
  7. @end 

首先,我們把Cocoa.h import進(jìn)來。Cocoa的應(yīng)用程序的所有的基本的類大多都是這樣做的。#import宏指令會(huì)自動(dòng)的避免把同一個(gè)文件包含多次。

@interface符號(hào)表明這是Photo類的聲明。冒號(hào)指定了父類。上面這個(gè)例子父類就是NSObject。

在大括弧里面,有兩個(gè)變量:caption和photographer。兩個(gè)都是NSString類型的。當(dāng)然了,他們也可以是任何別的類型包括id類型的。

最后@end結(jié)束整個(gè)聲明。

#p#

增加方法

讓我們?yōu)槌蓡T變量加一些getters:

  1.  #import <Cocoa/Cocoa.h> 
  2. @interface Photo : NSObject {  
  3.     NSString* caption;  
  4.     NSString* photographer;  
  5. }  
  6. - caption;  
  7. - photographer;  
  8.  
  9. @end     

別忘記,Objective-C方法不需要加get前綴。一個(gè)單獨(dú)小橫桿表明它是一個(gè)實(shí)例的方法。假如是一個(gè)加號(hào)的話,那就說明它是一個(gè)類的方法。

編譯器默認(rèn)的方法的返回類型為id。還有所有的方法的參數(shù)的默認(rèn)類型也都是id類型的。所以上面的代碼從技術(shù)上講是對(duì)的。但是很少這么用。我們還是給它加上返回類型吧:

  1.  #import <Cocoa/Cocoa.h> 
  2. @interface Photo : NSObject {  
  3.     NSString* caption;  
  4.     NSString* photographer;  
  5. }  
  6. - (NSString*) caption;  
  7. - (NSString*) photographer;  
  8. @end    

    

下面我們?cè)偌由蟬etters:

  1.  #import <Cocoa/Cocoa.h> 
  2. @interface Photo : NSObject {  
  3.     NSString* caption;  
  4.     NSString* photographer;  
  5. }  
  6. - (NSString*) caption;  
  7. - (NSString*) photographer;  
  8. - (void) setCaption: (NSString*)input;  
  9. - (void) setPhotographer: (NSString*)input;  
  10. @end      

Setters不需要返回任何值,所以我們把它的類型指定為void.

6、類的實(shí)現(xiàn)

我們通過實(shí)現(xiàn)getters來創(chuàng)建一個(gè)類的實(shí)現(xiàn):

  1.  #import "Photo.h"  
  2. @implementation Photo  
  3. - (NSString*) caption {  
  4.     return caption;  
  5. }  
  6. - (NSString*) photographer {  
  7.  
  8.     return photographer;  
  9.  
  10. }  
  11. @end 

這部分的代碼由@implementation再來加上類名開始,以@end結(jié)束。就跟類的接口定義一樣,所有的方法跟接口定義里的一樣。所有的對(duì)象都必要既要定義也要實(shí)現(xiàn)。

假如我們以前也寫過代碼的話,Objective-C里面的getters看上去跟別的差不多。所以我們下面就來介紹setters,它需要一點(diǎn)說明。

  1.  - (void) setCaption: (NSString*)input  
  2. {  
  3.     [caption autorelease];  
  4.     caption = [input retain];  
  5. }  
  6. - (void) setPhotographer: (NSString*)input  
  7. {  
  8.     [photographer autorelease];  
  9.     photographer = [input retain];  

每個(gè)setter處理兩個(gè)變量。第一個(gè)是當(dāng)前存在對(duì)象的應(yīng)用。第二個(gè)是新的輸入對(duì)象。在支持垃圾回收的開發(fā)環(huán)境里,我們只要直接賦新值就可以了:

  1.  - (void) setCaption: (NSString*)input {  
  2.     caption = input;  
  3. }     

但是假如我們不可以用垃圾回收機(jī)制的話,我們就需要先retain舊的對(duì)象,然后retain新的對(duì)象。

有兩種方法可以釋放一個(gè)引用對(duì)象:release 和 autorelease。標(biāo)準(zhǔn)的release會(huì)直接刪除引用。autorelease方法會(huì)在將來的某個(gè)時(shí)候去release它。在它聲明周期結(jié)束前,它會(huì)毫無疑問的存在。在本例中,上面setPhotographer中的photographer對(duì)象,將會(huì)在函數(shù)結(jié)束的時(shí)候被釋放。

在setter里面用autorelease是安全的,因?yàn)樾聦?duì)象跟老的對(duì)象有可能是同一個(gè)對(duì)象有可能指向的是同一個(gè)對(duì)象。對(duì)于一個(gè)我們即將retain的對(duì)象,我們不應(yīng)該立即release它。

這個(gè)也許現(xiàn)在看起來會(huì)困惑,但是隨著我們的學(xué)習(xí),會(huì)越來越能理解它?,F(xiàn)在我們不需要立刻完全理解它。

初始化

我們可以創(chuàng)建一個(gè)初始化方法去給類的實(shí)例的成員變量賦初值:

  1.  - (id) init  
  2. {  
  3.     if ( self = [super init] )  
  4.     {  
  5.         [self setCaption:@"Default Caption"];  
  6.         [self setPhotographer:@"Default Photographer"];  
  7.     }  
  8.     return self;  

上面的代碼感覺沒啥好解釋的,雖然第二行代碼好像看上去沒啥用。這個(gè)是一個(gè)單等于號(hào),就是把[super init]的值賦給了self。

它基本上是在調(diào)用父類去實(shí)現(xiàn)它的初始化。這個(gè)if代碼段是設(shè)置默認(rèn)值之前驗(yàn)證初始化是否成功。

釋放資源Dealloc

這個(gè)dealloc方法是在當(dāng)一個(gè)對(duì)象希望被從內(nèi)容里面刪除的時(shí)候調(diào)用。這個(gè)我們釋放在子類里面引用成員變量的最好的時(shí)機(jī):

  1. - (void) dealloc  
  2.  
  3.    [caption release];  
  4.    [photographer release];  
  5.    [super dealloc];  

開始兩行我們發(fā)送了release通知給了兩個(gè)成員變量。我們不要在這里用autorelease。用標(biāo)準(zhǔn)的release更快一點(diǎn)。

最后一行的[super dealloc];非常重要。我們必須要發(fā)送消息去讓父類清除它自己。假如不這么做的話,這個(gè)對(duì)象其實(shí)沒有被清除干凈,存在內(nèi)存泄露。

dealloc在垃圾回收機(jī)制下不會(huì)被調(diào)用到。取而代之的是,我們需要實(shí)現(xiàn)finalize方法。

#p#

7、More on Memory Management

Objective-C的內(nèi)存管理系統(tǒng)基于引用記數(shù)。所有我們需要關(guān)心的就是跟蹤我們引用,以及在運(yùn)行期內(nèi)是否真的釋放了內(nèi)存。

用最簡單的術(shù)語來解釋,當(dāng)我們alloc一個(gè)對(duì)象的時(shí)候,應(yīng)該在某個(gè)時(shí)候retain了它。每次我們調(diào)用了alloc或者retain之后,我們都必須要調(diào)用release。

這就是引用記數(shù)理論。但是在實(shí)踐的時(shí)候,只有兩種情況我們需要?jiǎng)?chuàng)建一個(gè)對(duì)象:

1. 成為一個(gè)類的成員變量

2. 只臨時(shí)的在一個(gè)函數(shù)里面被使用

在更多的時(shí)候,一個(gè)成員變量的setter應(yīng)該僅僅autorelease舊的對(duì)象,然后retain新的對(duì)象。我們只需要在dealloc的時(shí)候調(diào)用release就可以了。

所以真正需要做的就是管理函數(shù)內(nèi)部的local的引用。唯一的原則就是:假如我們alloc或者copy了一個(gè)對(duì)象,那么我們?cè)诤瘮?shù)結(jié)束的時(shí)候需要release或者autorelease它。假如我們是通過別的方式創(chuàng)建的,就不管。

這里是管理成員對(duì)象的例子:

  1.  - (void) setTotalAmount: (NSNumber*)input  
  2. {  
  3.     [totalAmount autorelease];  
  4.     totalAmount = [input retain];  
  5. }  
  6. - (void) dealloc  
  7. {  
  8.     [totalAmount release];  
  9.     [super dealloc];  

這里是本地引用的例子。我們只需要release我們用alloc創(chuàng)建的對(duì)象:

  1.  NSNumber* value1 = [[NSNumber alloc] initWithFloat:8.75];  
  2. NSNumber* value2 = [NSNumber numberWithFloat:14.78];  
  3. // only release value1, not value2  
  4. [value1 release]; 

這里是用本地引用對(duì)象去設(shè)一個(gè)成員變量的例子:

  1.  NSNumber* value1 = [[NSNumber alloc] initWithFloat:8.75];  
  2. [self setTotal:value1];  
  3. NSNumber* value2 = [NSNumber numberWithFloat:14.78];  
  4. [self setTotal:value2];  
  5. [value1 release]; 

注意到如何管理本地引用其實(shí)都是一樣的。不管你是否把它設(shè)給了一個(gè)成員變量。我們無須考慮setters的內(nèi)部實(shí)現(xiàn)。

如果我們很好的理解了這些的話,我們基本上理解了80%的Objective-C內(nèi)存管理方面的內(nèi)容了

8、Logging

在Objective-C里,往console寫日記非常簡單。事實(shí)上NSLog()跟C語言的printf()兩個(gè)函數(shù)幾乎完全相同,除了NSLog是用額外的“%@”去獲得對(duì)象。

NSLog ( @"The current date and time is: %@", [NSDate date] );

我們可以log一個(gè)對(duì)象到console里去。NSLog函數(shù)調(diào)用要輸出對(duì)象的description方法,然后打印返回的NSString。我們可以在自己的類里重寫description方法,這樣我們就可以得到一個(gè)自定義的字符串。

9、屬性Properties

前面我們寫caption和author的accessors的時(shí)候,你可以已經(jīng)注意到了代碼非常簡明,應(yīng)該可以被抽象提取出來。

屬性在Objective-C里是一個(gè)新的功能。他可以讓我們自動(dòng)的生成accessors,另外還有一些別的優(yōu)點(diǎn)。我們可以把上面Photo的類轉(zhuǎn)成用屬性來實(shí)現(xiàn):

上面那個(gè)類原先的實(shí)現(xiàn)是這樣:

  1.  #import <Cocoa/Cocoa.h> 
  2. @interface Photo : NSObject {  
  3.     NSString* caption;  
  4.     NSString* photographer;  
  5. }  
  6. - (NSString*) caption;  
  7.  
  8. - (NSString*) photographer;  
  9. - (void) setCaption: (NSString*)input;  
  10. - (void) setPhotographer: (NSString*)input;  
  11. @end 

假如用屬性來實(shí)現(xiàn)就是這樣:

  1.  #import <Cocoa/Cocoa.h> 
  2. @interface Photo : NSObject {  
  3.     NSString* caption;  
  4.     NSString* photographer;  
  5. }  
  6. @property (retain) NSString* caption;  
  7. @property (retain) NSString* photographer;  
  8. @end 

@property是Objective-C來聲明屬性的編譯指令。括號(hào)里面的"retain"指明了setter需要retain輸入的對(duì)象。這行其他的部分指定了屬性的類型以及名字。

下面讓我們來看看這個(gè)類的實(shí)現(xiàn):

  1.  #import "Photo.h"  
  2. @implementation Photo  
  3. @synthesize caption;  
  4. @synthesize photographer;  
  5. - (void) dealloc  
  6. {  
  7.     [caption release];  
  8.     [photographer release];  
  9.     [super dealloc];  
  10. }  
  11. @end 

@synthesize指令自動(dòng)的生成了我們的setters和getters。所以我們只需要實(shí)現(xiàn)類的dealloc方法。

Accessors只有當(dāng)他們?cè)葲]有的時(shí)候,才會(huì)被生成。所以可以放心大膽的去用@synthesize來指定屬性。而且可以隨意實(shí)現(xiàn)你自己的getter和setter。編譯器會(huì)自己去找哪個(gè)方法沒有。

屬性聲明還有別的選項(xiàng),但是限于篇幅層次,我們下次再介紹。

10、Calling Methods on Nil

在Objective-C里,nil對(duì)象被設(shè)計(jì)來跟NULL空指針關(guān)聯(lián)的。他們的區(qū)別就是nil是一個(gè)對(duì)象,而NULL只是一個(gè)值。而且我們對(duì)于nil調(diào)用方法,不會(huì)產(chǎn)生crash或者拋出異常。

這個(gè)技術(shù)被framework通過多種不同的方式使用。最主要的就是我們現(xiàn)在在調(diào)用方法之前根本無須去檢查這個(gè)對(duì)象是否是nil。假如我們調(diào)了nil對(duì)象的一個(gè)有返回值的方法,那么我們會(huì)得到一個(gè)nil返回值。

我們可以通過nil對(duì)象讓我們的dealloc函數(shù)實(shí)現(xiàn)看上去更帥一點(diǎn):

  1. - (void) dealloc  
  2. {  
  3.     self.caption = nil;  
  4.     self.photographer = nil;  
  5.     [super dealloc];  

之所以可以這么做是因?yàn)槲覀兘o把nil對(duì)象設(shè)給了一個(gè)成員變量,setter就會(huì)retain nil對(duì)象(當(dāng)然了這個(gè)時(shí)候nil對(duì)象啥事情也不會(huì)做)然后release舊的對(duì)象。這個(gè)方式來釋放對(duì)象其實(shí)更好,因?yàn)檫@樣做的話,成員變量連指向隨機(jī)數(shù)據(jù)的機(jī)會(huì)都沒有,而通過別的方式,出現(xiàn)指向隨機(jī)數(shù)據(jù)的情形機(jī)會(huì)不可避免。

注意到我們調(diào)用的self.<var>這樣的語法,這表示我們正在用setter,而且不會(huì)引起任何內(nèi)存問題。假如我們直接去設(shè)值的話,就會(huì)有內(nèi)存溢出:

  1. // incorrect. causes a memory leak.   
  2. // use self.caption to go through setter   
  3. caption = nil

11、Categories

Categories是Objective-C里面最常用到的功能之一。 基本上category可以讓我們給已經(jīng)存在的類增加方法,而不需要增加一個(gè)子類。而且不需要知道它內(nèi)部具體的實(shí)現(xiàn)。

如果我們想增加某個(gè)framework自帶的類的方法,這非常有效。如果我們想在我們程序工程的NSString能夠增加一個(gè)方法,我們就可以使用category。甚至都不需要自己實(shí)現(xiàn)一個(gè)NSString的子類。

比如,我們想在NSString里面增加一個(gè)方法來判斷它是否是一個(gè)URL,那我們就可以這么做:

  1. #import <Cocoa/Cocoa.h> 
  2. @interface NSString (Utilities)  
  3. - (BOOL) isURL;  
  4. @end 

這跟類的定義非常類似。區(qū)別就是category沒有父類,而且在括號(hào)里面要有category的名字。名字可以隨便取,但是習(xí)慣叫法會(huì)讓人比較明白category里面有些什么功能的方法。

這里是具體的實(shí)現(xiàn)。但是要注意,這本身并不是一個(gè)判斷URL很好的實(shí)現(xiàn)。我們主要是為了整體的了解category的概念。

  1.  #import "NSString-Utilities.h"  
  2. @implementation NSString (Utilities)  
  3. - (BOOL) isURL  
  4. {  
  5.     if ( [self hasPrefix:@"http://"] )  
  6.         return YES;  
  7.     else  
  8.         return NO;  
  9. }  
  10. @end 

現(xiàn)在我們可以在任何的NSString類對(duì)象里都可以調(diào)用這個(gè)方法了。下面的代碼在console里面打印的"string1 is a URL":

  1.  NSString* string1 = @"http://pixar.com/";  
  2. NSString* string2 = @"Pixar";  
  3. if ( [string1 isURL] )  
  4.     NSLog (@"string1 is a URL");  
  5. if ( [string2 isURL] )  
  6.     NSLog (@"string2 is a URL");     

  

跟子類不一樣,category不能增加成員變量。我們還可以用category來重寫類原先的存在的方法,但是這需要非常非常小心。

記住,當(dāng)我們通過category來修改一個(gè)類的時(shí)候,它對(duì)應(yīng)用程序里的這個(gè)類所有對(duì)象都起作用。

后記

上面Objective-C的比較基礎(chǔ)的大概的講了一下。Objective-C還是比較好上手的。沒有特別的語法需要去學(xué)習(xí)。而且一些概念在Objective-C里面被反復(fù)運(yùn)用。

小結(jié):iPhone開發(fā)必備 Objective-C 語言教程的內(nèi)容介紹完了,希望本文對(duì)你有所幫助。

責(zé)任編輯:zhaolei 來源: 蘋果開發(fā)中文網(wǎng)
相關(guān)推薦

2011-07-29 15:47:21

iPhone開發(fā) Objective- C

2010-09-01 09:19:33

Objective-CiPhone開發(fā)iPhone

2011-07-18 14:59:20

iPhone Objective-

2011-07-07 17:04:33

iPhone Action Objective-

2011-05-11 11:20:26

Objective-C

2011-07-08 13:49:46

Objective-C UUID

2011-07-27 17:10:30

Objective-C 持久化

2011-08-05 14:03:39

Objective-C 對(duì)象 模板

2011-03-18 17:35:43

2013-07-24 13:49:45

iOS高效開發(fā)

2014-04-01 10:50:42

iOS開發(fā)runtimeObjective-C

2011-08-22 09:48:16

WindowsObjective-C

2011-08-18 09:21:17

Objective-C

2014-04-28 09:56:56

Objective-CiOS命名空間

2011-08-17 12:03:36

Objective-C

2011-08-16 10:23:04

Objective-CNSAutoreleaXcode常用鍵

2011-07-29 16:08:31

Objective-C 內(nèi)存

2010-11-24 10:35:40

Objective-C

2011-08-12 10:27:52

Objective-C對(duì)象

2014-04-15 11:27:50

C++開發(fā)者Objective-C核心語法
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)