Objective-C----記憶體管理--點語法

weixin_33724059發表於2017-04-14

1、點語法及其好處

1、方便程式設計師能夠很快的轉到O-C上來

2、讓程式設計簡單化

3、隱藏了記憶體管理細節

4、隱藏了多執行緒、同步、加鎖細 節

5、點語法的使用

Dog *dog=[[Dog aloc] init];

[dog setAge:100];

int dogAge=[dog age];

NSLog(@"Dog Age is %d",dogAge);

下面的程式碼用點語法

dog.age=200;//呼叫setAge方法

dogAge=dog.age;//呼叫age方法

這裡的點不上呼叫的dog這個物件的欄位,而且在呼叫方法。dog.age是在呼叫setAge這個方法,下面的dog.age 是在呼叫age這個方法。

點語法是編譯器級別

編譯器會把dog.age=200;展開成[dog setAge:200];

會把dogAge=dog.age;展開成[dog age];函式呼叫

6、點語法setter和getter規範

setter函式展開規範

dog.age=200;

[dog setAge:200];

getter函式展開規範

int dogAge=dog.age;

int dogAge=[dog age];

專案當中如果想用點語法,必須在專案中的.h檔案和.m檔案中宣告和實現setAge和age方法,也就是說要宣告和實現getter和setter方法。

2、@property @synthesize如何使用

@property是讓編譯器自動產生函式申明

不再寫下面2行程式碼

-(void) setAge:(int)newAge;

-(void) age;

只需要下列一行就可以代替

@property int age;

@synthesize 意思是合成

@synthesize就是編譯器自動實現getter和setter函式

不用寫下列程式碼

- (void) setAge:(int)newAge

{

age=newAge;

}

-(int) age

{

return age;

}

只需要些

@synthesize age;

3、@property @synthesize編譯器如何展開

@property @synthesize只能展開成標準的模板,如果想在getter和setter函式中增加內容,則不能用@synthesize表示方法。

4、如何使用點語法

self.age放在=號的左邊和右邊是不一樣的,放在左邊是表示呼叫setter函式,放在右邊表示呼叫getter函式。

為了區別開age,我們會對dog類做一些改動

@interface Dog:NSObject

{

int _age;//改動了以前是int age;

}

@property int age;

@end;

#import "Dog.h"

@implementation Dog

@synthesize age=_age;

@end

5、@property其他屬性

readwrite(預設),readonly

表示屬性是可讀寫的,也就是說可以使用getter和setter,而readonly只能使用getter

assign(預設),retain,copy

表示屬性如何儲存

nonatomic

表示不用考慮執行緒安全問題

getter=......,setter=......

重新設定getter函式和setter函式名

這個專案的程式碼如下;

dog.h檔案程式碼


5458052-2050b00d8ebd9562.png

dog.m檔案程式碼


5458052-e65a1b3c4cb1a8b6.png

main.m檔案程式碼


5458052-7788b79e1b70d6d3.png

下圖為今年部分iOS開發的視訊教程,因為不定時更新中故不做多的截圖,如果有iOS開發上的問題不懂或者需要視訊教程可以看我的個人簡介。

不定時更新中。

5458052-8155a32731d0ba50.png

相關文章