淺析Objective-C的程序結(jié)構(gòu)及面向?qū)ο蟮木幊谭绞?/h1>
更新時(shí)間:2016年04月22日 09:11:54 作者:雙子座
這篇文章主要介紹了Objective-C的程序結(jié)構(gòu)及面向?qū)ο蟮木幊谭绞?面向?qū)ο蟛糠种泻唵蔚刂v解了Objective-C中的類、對(duì)象和方法幾大面向?qū)ο缶幊痰囊?需要的朋友可以參考下
Objective-C程序的結(jié)構(gòu)
就像學(xué)習(xí)所有編程語言一樣,第一個(gè)程序就是在屏幕打印出“Hello World !”。
我看的書上用到的編譯器還是比較老的,我現(xiàn)在用的是Xcode4.2.1,它有自動(dòng)內(nèi)存管理,所以書上的一些程序也許會(huì)報(bào)錯(cuò)??梢栽趧?chuàng)建工程時(shí)不選擇Use Automatic Reference Counting選項(xiàng)解決這個(gè)問題。
運(yùn)行Xcode,新建一個(gè)Command Line Tool工程,取名FirstProgram。

在下一步,我們也取消Use Automatic Reference Counting選項(xiàng)。
不管自動(dòng)生成的代碼是什么樣的,我們將代碼改成以下:
復(fù)制代碼 代碼如下:
//First Program Example
#import <Foundation/Foundation.h>
int main (int argc, const char * argv[]) {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSLog(@"Hello, World!");
[pool drain];
return 0;
}
運(yùn)行,顯示如下:

以下是對(duì)這段代碼的簡單說明:
1、程序第一行是注釋,跟C/C++/Java一樣,Objective-C注釋也可以用 //、/*??*/來實(shí)現(xiàn)。
2、#import <Foundation/Foundation.h>
告訴編譯器找到并處理名為Foundation的文件。
3、int main (int argc, const char * argv[])
指定程序名稱為main,這是一個(gè)特殊名稱,表示程序開始的地方。
4、NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
為自動(dòng)釋放池在內(nèi)存中保留了空間。
5、NSLog(@"Hello, World!");
指定要調(diào)用名為NSLog的例程。傳遞給NSLog的參數(shù)是字符串@"Hello, World!",它是一個(gè)NSString對(duì)象。
6、[pool drain];
用于釋放已分配的內(nèi)存池,以及與程序相關(guān)聯(lián)的對(duì)象。
類、對(duì)象和方法
1、實(shí)例和方法
(1)使用類創(chuàng)建一個(gè)實(shí)例:
復(fù)制代碼 代碼如下:
yourCar = [Car new];
這里的Car是一個(gè)類,yourCar是一個(gè)對(duì)象
(2)對(duì)類和實(shí)例應(yīng)用方法:
復(fù)制代碼 代碼如下:
[ClassOrInstance methed];
類或?qū)嵗拿Q要緊跟“[”,“];”用于終止。這條語句相當(dāng)于Java中的:對(duì)象名.方法名
再如:
復(fù)制代碼 代碼如下:
currentMileage = [yourCar currentOdometer];
其中,currentMileage用于接收返回值
2、一段詳細(xì)代碼及說明:
復(fù)制代碼 代碼如下:
#import <Foundation/Foundation.h>
//@interface section
@interface Fraction : NSObject {
int numerator;
int denominator;
}
-(void) print;
-(void) setNumerator: (int) n;
-(void) setDenominator: (int) d;
@end
復(fù)制代碼 代碼如下:
//@implementation section
@implementation Fraction
-(void) print {
NSLog(@"%i/%i",numerator,denominator);
}
-(void) setNumerator:(int)n {
numerator = n;
}
-(void) setDenominator:(int)d {
denominator = d;
}
@end
復(fù)制代碼 代碼如下:
//program section
int main (int argc, const char * argv[])
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
Fraction *myFraction;
myFraction = [Fraction alloc];
myFraction = [myFraction init];
[myFraction setNumerator: 1];
[myFraction setDenominator: 3];
NSLog(@"The value of myFraction is: ");
[myFraction print];
[muFraction release];
[pool drain];
return 0;
}
(1)第4行是聲明一個(gè)類的方法,@interface 新類名:父類名
(2)第8~10行定義了三個(gè)方法,其中“-”表示實(shí)例方法,“+”表示類方法。
實(shí)例方法總是可以訪問它的實(shí)例變量,而類方法卻不行,因?yàn)轭惙椒ㄖ惶幚眍惐旧恚惶幚眍惖娜魏螌?shí)例
(3)第31~32行可以合并成
復(fù)制代碼 代碼如下:
myFraction = [[Fraction alloc] init];
或者
復(fù)制代碼 代碼如下:
myFraction = [Fraction new];
(4)第39行用于為對(duì)象myFraction釋放內(nèi)存,值得注意的是,最新的Xcode編譯器可以實(shí)現(xiàn)自動(dòng)釋放內(nèi)存
相關(guān)文章
-
iOS使用核心動(dòng)畫和粒子發(fā)射器實(shí)現(xiàn)點(diǎn)贊按鈕的方法
這篇文章主要給大家介紹了iOS如何使用核心動(dòng)畫和粒子發(fā)射器實(shí)現(xiàn)點(diǎn)贊按鈕的方法,文中給出了詳細(xì)的示例代碼,相信對(duì)大家的理解和學(xué)習(xí)具有一定的參考借鑒,有需要的朋友們下面跟著小編一起來學(xué)習(xí)學(xué)習(xí)吧。 2016-12-12
-
IOS身份證識(shí)別(OCR源碼)詳解及實(shí)例代碼
這篇文章主要介紹了IOS身份證識(shí)別(OCR源碼)詳解及實(shí)例的相關(guān)資料,需要的朋友可以參考下 2017-03-03
-
iOS多控制器實(shí)現(xiàn)帶滑動(dòng)動(dòng)畫
這篇文章主要為大家詳細(xì)介紹了iOS多控制器實(shí)現(xiàn)帶滑動(dòng)動(dòng)畫,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下 2018-06-06
-
iOS UIButton擴(kuò)大按鈕響應(yīng)區(qū)域的解決方法
這篇文章主要為大家詳細(xì)介紹了iOS UIButton擴(kuò)大按鈕響應(yīng)區(qū)域的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下 2018-08-08
-
詳解iOS App開發(fā)中UIViewController的loadView方法使用
這篇文章主要介紹了詳解iOS App開發(fā)中UIViewController的loadView方法使用,講解了訪問view屬性時(shí)loadView方法的調(diào)用及使用loadView時(shí)的一些注意點(diǎn),需要的朋友可以參考下 2016-03-03
-
iOS App開發(fā)中UITextField組件的常用屬性小結(jié)
這篇文章主要介紹了iOS App開發(fā)中UITextField組件的常用屬性小結(jié),文中還介紹了UITextField隱藏鍵盤及為內(nèi)容增加校驗(yàn)的兩個(gè)使用技巧,需要的朋友可以參考下 2016-04-04
最新評(píng)論
Objective-C程序的結(jié)構(gòu)
就像學(xué)習(xí)所有編程語言一樣,第一個(gè)程序就是在屏幕打印出“Hello World !”。
我看的書上用到的編譯器還是比較老的,我現(xiàn)在用的是Xcode4.2.1,它有自動(dòng)內(nèi)存管理,所以書上的一些程序也許會(huì)報(bào)錯(cuò)??梢栽趧?chuàng)建工程時(shí)不選擇Use Automatic Reference Counting選項(xiàng)解決這個(gè)問題。
運(yùn)行Xcode,新建一個(gè)Command Line Tool工程,取名FirstProgram。

在下一步,我們也取消Use Automatic Reference Counting選項(xiàng)。
不管自動(dòng)生成的代碼是什么樣的,我們將代碼改成以下:
//First Program Example
#import <Foundation/Foundation.h>
int main (int argc, const char * argv[]) {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSLog(@"Hello, World!");
[pool drain];
return 0;
}
運(yùn)行,顯示如下:

以下是對(duì)這段代碼的簡單說明:
1、程序第一行是注釋,跟C/C++/Java一樣,Objective-C注釋也可以用 //、/*??*/來實(shí)現(xiàn)。
2、#import <Foundation/Foundation.h>
告訴編譯器找到并處理名為Foundation的文件。
3、int main (int argc, const char * argv[])
指定程序名稱為main,這是一個(gè)特殊名稱,表示程序開始的地方。
4、NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
為自動(dòng)釋放池在內(nèi)存中保留了空間。
5、NSLog(@"Hello, World!");
指定要調(diào)用名為NSLog的例程。傳遞給NSLog的參數(shù)是字符串@"Hello, World!",它是一個(gè)NSString對(duì)象。
6、[pool drain];
用于釋放已分配的內(nèi)存池,以及與程序相關(guān)聯(lián)的對(duì)象。
類、對(duì)象和方法
1、實(shí)例和方法
(1)使用類創(chuàng)建一個(gè)實(shí)例:
yourCar = [Car new];
這里的Car是一個(gè)類,yourCar是一個(gè)對(duì)象
(2)對(duì)類和實(shí)例應(yīng)用方法:
[ClassOrInstance methed];
類或?qū)嵗拿Q要緊跟“[”,“];”用于終止。這條語句相當(dāng)于Java中的:對(duì)象名.方法名
再如:
currentMileage = [yourCar currentOdometer];
其中,currentMileage用于接收返回值
2、一段詳細(xì)代碼及說明:
#import <Foundation/Foundation.h>
//@interface section
@interface Fraction : NSObject {
int numerator;
int denominator;
}
-(void) print;
-(void) setNumerator: (int) n;
-(void) setDenominator: (int) d;
@end
//@implementation section
@implementation Fraction
-(void) print {
NSLog(@"%i/%i",numerator,denominator);
}
-(void) setNumerator:(int)n {
numerator = n;
}
-(void) setDenominator:(int)d {
denominator = d;
}
@end
//program section
int main (int argc, const char * argv[])
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
Fraction *myFraction;
myFraction = [Fraction alloc];
myFraction = [myFraction init];
[myFraction setNumerator: 1];
[myFraction setDenominator: 3];
NSLog(@"The value of myFraction is: ");
[myFraction print];
[muFraction release];
[pool drain];
return 0;
}
(1)第4行是聲明一個(gè)類的方法,@interface 新類名:父類名
(2)第8~10行定義了三個(gè)方法,其中“-”表示實(shí)例方法,“+”表示類方法。
實(shí)例方法總是可以訪問它的實(shí)例變量,而類方法卻不行,因?yàn)轭惙椒ㄖ惶幚眍惐旧恚惶幚眍惖娜魏螌?shí)例
(3)第31~32行可以合并成
myFraction = [[Fraction alloc] init];
或者
myFraction = [Fraction new];
(4)第39行用于為對(duì)象myFraction釋放內(nèi)存,值得注意的是,最新的Xcode編譯器可以實(shí)現(xiàn)自動(dòng)釋放內(nèi)存
相關(guān)文章
iOS使用核心動(dòng)畫和粒子發(fā)射器實(shí)現(xiàn)點(diǎn)贊按鈕的方法
這篇文章主要給大家介紹了iOS如何使用核心動(dòng)畫和粒子發(fā)射器實(shí)現(xiàn)點(diǎn)贊按鈕的方法,文中給出了詳細(xì)的示例代碼,相信對(duì)大家的理解和學(xué)習(xí)具有一定的參考借鑒,有需要的朋友們下面跟著小編一起來學(xué)習(xí)學(xué)習(xí)吧。2016-12-12
IOS身份證識(shí)別(OCR源碼)詳解及實(shí)例代碼
這篇文章主要介紹了IOS身份證識(shí)別(OCR源碼)詳解及實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-03-03
iOS多控制器實(shí)現(xiàn)帶滑動(dòng)動(dòng)畫
這篇文章主要為大家詳細(xì)介紹了iOS多控制器實(shí)現(xiàn)帶滑動(dòng)動(dòng)畫,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-06-06
iOS UIButton擴(kuò)大按鈕響應(yīng)區(qū)域的解決方法
這篇文章主要為大家詳細(xì)介紹了iOS UIButton擴(kuò)大按鈕響應(yīng)區(qū)域的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-08-08
詳解iOS App開發(fā)中UIViewController的loadView方法使用
這篇文章主要介紹了詳解iOS App開發(fā)中UIViewController的loadView方法使用,講解了訪問view屬性時(shí)loadView方法的調(diào)用及使用loadView時(shí)的一些注意點(diǎn),需要的朋友可以參考下2016-03-03
iOS App開發(fā)中UITextField組件的常用屬性小結(jié)
這篇文章主要介紹了iOS App開發(fā)中UITextField組件的常用屬性小結(jié),文中還介紹了UITextField隱藏鍵盤及為內(nèi)容增加校驗(yàn)的兩個(gè)使用技巧,需要的朋友可以參考下2016-04-04

