第05天OC語言(07):property修飾符

  • 不要等到明天,明天太遙遠,今天就行動。
須讀:看完該文章你能做什么?

對property關鍵字的修飾符,深刻理解.對于修飾符的<底層原理>有一個深刻了解

學習前:你必須會什么?(在這里我已經默認你具備C語言的基礎了)

1.property關鍵字是用來干什么的,
2.synthesize關鍵字是用來干什么的
3.property在Xcode4.4之后都干了些什么

1.編譯器只要看到 @property, 就知道我們要生成某一個屬性的 getter/setter方法的聲明
2.synthesize 是一個編譯器指令,它可以簡化 我們getter/setter方法的實現
3.從Xcode4.4以后 Apple 對 @property進行一個增強,以后只要利用一個 @property 就可以同時生成 setter 、 getter 方法的聲明 和實現

一、本章筆記
 一、setter方法內存管理
     1.判斷傳入的對象 和當前的對象是否一樣
     2.release 以前對象
     3.retain 傳入的對象
 二、property關鍵字的修飾符
     readonly : 只會生成getter方法
     readwrite : 即會生成getter 也會生成 setter, 默認什么都不寫 就是readwrite
     getter : 可以給生成的getter方法 起一個名稱
     setter : 可以給setter方法 起一個名稱
     retain : 就會自動給我們 生成setter/getter方法 內存管理的代碼
     assign : 不會幫我們生成 setter方法內存管理的代碼, 僅僅只會生成 普通 getter/ setter方法, 默認什么不寫 就是assign
         - (void)setAge:(int)age;
         - (int)age;
         - (void)setAge:(int)age
         {
            _age = age;
         }
         - (int)age
         {
            retrun _age;
         }
 多線程
         atomic : 性能低(默認)
         nonatomic : 性能高
         在iOS開發中 99% 都是些 nonatomic
 三、
    1.相同類型的property修飾符 不能同時使用
    2.不同類型的property修飾符 可以多個結合在一起使用, 多個之間用,隔開
    3.iOS開發 只要寫上property ,那么就立刻寫上 nonatomic

二、code
main.m
#pragma mark 07-property修飾符
#pragma mark 概念
/*
 一、setter方法內存管理
     1.判斷傳入的對象 和當前的對象是否一樣
     2.release 以前對象
     3.retain 傳入的對象
 二、property關鍵字的修飾符
     readonly : 只會生成getter方法
     readwrite : 即會生成getter 也會生成 setter, 默認什么都不寫 就是readwrite
     getter : 可以給生成的getter方法 起一個名稱
     setter : 可以給setter方法 起一個名稱
     retain : 就會自動給我們 生成setter/getter方法 內存管理的代碼
     assign : 不會幫我們生成 setter方法內存管理的代碼, 僅僅只會生成 普通 getter/ setter方法, 默認什么不寫 就是assign
         - (void)setAge:(int)age;
         - (int)age;
         - (void)setAge:(int)age
         {
            _age = age;
         }
         - (int)age
         {
            retrun _age;
         }
 多線程
         atomic : 性能低(默認)
         nonatomic : 性能高
         在iOS開發中 99% 都是些 nonatomic
 三、
    1.相同類型的property修飾符 不能同時使用
    2.不同類型的property修飾符 可以多個結合在一起使用, 多個之間用,隔開
    3.iOS開發 只要寫上property ,那么就立刻寫上 nonatomic

 */
#pragma mark - 代碼
#import <Foundation/Foundation.h>
#pragma mark 類

#import "Person.h"

#pragma mark - main函數
int main(int argc, const char * argv[])
{
    
    Person *p = [Person new];
    Room *r = [Room new];
    Car *c = [Car new];
    Dog *d = [Dog new];
    
    p.room = r;
    [r release];
    /*
    p.car = c;
    p.dog = d;
    
    
    [d release];
    [c release];
    [r release];
    [p release];
     */
    
#pragma mark setter方法內部的內存管理兩種情況
    // 換房了
//    Room *r2 = [Room new];
//    p.room = r2;
//    [r2 release];

    // 重復賦值
    p.room = r;
    
    /*
     通過 是用retain的修飾符驗證
     retain 內部是這樣做的
     - (void)setRoom:(Room *)room
     {
     
     if (_room != room) {
     [_room release];
     _room = [room retain];
     }
     }
     */
    
    [p release];
    return 0;
}

Person
>>>.h
#import <Foundation/Foundation.h>
#import "Room.h"
#import "Car.h"
#import "Dog.h"

@interface Person : NSObject
{
    Room *_room;
    Car *_car;
    Dog *_dog;
    
}
/*
- (void)setRoom:(Room *)room;
- (void)setCar:(Car *)car;
- (void)setDog:(Dog *)dog;

- (Room *)room;
- (Car *)car;
- (Dog *)dog;
*/

/*
 readonly : 只會生成getter方法
 readwrite : 即會生成getter 也會生成 setter, 默認什么都不寫 就是readwrite
 
 getter : 可以給生成的getter方法 起一個名稱
 setter : 可以給setter方法 起一個名稱
 
 retain : 就會自動給我們 生成setter/getter方法 內存管理的代碼
 assign : 不會幫我們生成 setter方法內存管理的代碼, 僅僅只會生成 普通 getter/ setter方法, 默認什么不寫 就是assign
 - (void)setAge:(int)age;
 - (int)age;
 - (void)setAge:(int)age
 {
    _age = age;
 }
 - (int)age
 {
    retrun _age;
 }

 
 多線程
 atomic : 性能低(默認)
 nonatomic : 性能高
 在iOS開發中 99% 都是些 nonatomic
 */
//@property(retain) int age;

#pragma property 修飾符
//@property(retain) Room *room;
// 1.相同類型的property修飾符 不能同時使用
// 2.不同類型的property修飾符 可以多個結合在一起使用, 多個之間用,隔開
// 3.iOS開發 只要寫上property ,那么就立刻寫上 nonatomic
@property(nonatomic,retain) Room *room;

@end

>>>.m
#import "Person.h"

@implementation Person
/*
 setter方法內存管理
 1.判斷傳入的對象 和當前的對象是否一樣
 2.release 以前對象
 3.retain 傳入的對象
 */

/*
- (void)setRoom:(Room *)room
{
    
    if (_room != room) {
        [_room release];
        _room = [room retain];
    }
}
- (void)setCar:(Car *)car
{
    if (_car != car) {
        [_car release];
        _car = [_car retain];
    }
}
- (void)setDog:(Dog *)dog
{
    if (_dog != dog) {
        [_dog release];
        _dog = [_dog retain];
    }
}

- (Room *)room
{
    return _room;
}
- (Car *)car
{
    return _car;
}
- (Dog *)dog
{
    return _dog;
}

*/
- (void)dealloc
{
    [_room release];
    [_car release];
    [_dog release];
    NSLog(@"%s",__func__);
    [super dealloc];
}
@end

Room
>>>.h
#import <Foundation/Foundation.h>

@interface Room : NSObject

@end

>>>.m
#import "Room.h"

@implementation Room
- (void)dealloc
{
    NSLog(@"%s",__func__);
    [super dealloc];
}
@end

Car
>>>.h
#import <Foundation/Foundation.h>

@interface Car : NSObject

@end

>>>.m
#import "Car.h"

@implementation Car
- (void)dealloc
{
    NSLog(@"%s",__func__);
    [super dealloc];
}
@end

Dog
>>>.h
#import <Foundation/Foundation.h>

@interface Dog : NSObject

@end

>>>.m
#import "Dog.h"

@implementation Dog
- (void)dealloc
{
    NSLog(@"%s",__func__);
    [super dealloc];
}
@end

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,963評論 6 542
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,348評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,083評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,706評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,442評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,802評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,795評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,983評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,542評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,287評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,486評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,030評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,710評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,116評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,412評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,224評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,462評論 2 378

推薦閱讀更多精彩內容

  • 很多人講屬性修飾詞的時候,喜歡從字面或者定義的角度介紹它們間的區別。這篇文章,我們側重從修飾詞對setter方法的...
    小碼僧閱讀 3,450評論 1 18
  • 2、#import和#include的區別是什么?#import<> 跟 #import""有什么區別? .#im...
    AlanGe閱讀 328評論 0 0
  • 1. 使用 #import 相對c的 include 是防止頭文件的重復導入 2. NSLog 相對于 print...
    迎風起飛的豬閱讀 1,761評論 6 9
  • 這是今天我家孩子給我說的一句話。因為今天我發脾氣并揍了她。 原因是什么呢?本來出于解放自己(我確實也很忙)和培養...
    KK栗子閱讀 406評論 0 0
  • 1.UIView是iOS系統中界面元素的基礎,所有的界面元素都繼承自它。它本身完全是由CoreAnimation來...
    winnisz閱讀 202評論 0 0