OC語言day05-06set方法內存管理

pragma mark set方法內存管理

pragma mark 概念

pragma mark 代碼

#import <Foundation/Foundation.h>
#pragma mark 類
#import "Person.h"
#import "Room.h"
#pragma mark main函數(shù)
int main(int argc, const char * argv[])
{
    
    @autoreleasepool {
        // 1. 創(chuàng)建兩個對象
        Person *p = [[Person alloc]init];
        Room *r = [[Room alloc]init];
        r.no = 888;
        
        // 2.將房間賦值給人
        // 人需要使用 這間房, 只要人在 房間就一定要在
        p.room = r;
        
        [r release];
        
        
        // 3. 換房
        /*
        Room *r2 = [[Room alloc]init];
        r2.no = 444;
        p.room = r2; // (換房的時候 有問題)
        [r2 release];
        */
        p.room = r;
        
#warning 這里出現(xiàn)bug 人在房間都應該在的,但是這里房間已經被銷毀了
        // 在這行代碼之前, 人都沒有被釋放
        NSLog(@"-------");
        
        
        // 人都不在了,房間也必須銷毀了
        [p release];
    }
    return 0;
}



Person.h //人類
#import <Foundation/Foundation.h>

#import "Room.h"
@interface Person : NSObject
{
    Room *_room;
}

- (void)setRoom:(Room *)room;
- (Room *)room;

@end
Person.m
#import "Person.h"

@implementation Person


#warning 當A對象 想 使用B對象, 一定要對B對象 進行一次retain, 這樣才能保證A對象存在 B對象就存在, 也就是說這樣才能保證無論 在什么時候 在A對象中都可以使用B對象
// 當A對象 釋放的時候, 一定要對B 對應進行一次release, 這樣才能保證 A 對象釋放了, B 對象對應 也會隨之釋放, 避免內存泄漏
// 總結 一句話 : 有增就有減
//
- (void)setRoom:(Room *)room  // room = r
{
#warning ??(重點) 每次換房的時候 將以前的房間 釋放掉 -1 
//    [_room release];
#warning ??(重點修改) 每次換房的時候 《只有房間不同才需要》 將以前的房間 釋放掉 -1
    // 如果當前的房間 不等于 傳遞進來的房間 才需要做操作
    // 只有房間不同 才需要 release 和 retain
    if(_room != room)
    {
        // nil != 0ffc8
        [_room release];
        
        /*
        // 應該對 房間類 的引用計數(shù)器+1
        [room retain];
        
        _room = room;
         */
#warning 優(yōu)化
        // retain 不僅僅會對引用計數(shù)器+1,而且還會返回當前對象
        _room = [room retain];
    }
}

- (Room *)room
{
    return _room;
}

- (void)dealloc
{
#warning 人釋放了 ,房間也需要釋放
    [_room release];    
    NSLog(@"%s",__func__);
    [super dealloc];
}
@end

Room.h //房間類
#import <Foundation/Foundation.h>

@interface Room : NSObject

@property int no; // 房間號

@end
Room.m
#import "Room.h"

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

@end

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市窗宦,隨后出現(xiàn)的幾起案子药蜻,更是在濱河造成了極大的恐慌着撩,老刑警劉巖殖妇,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件奄喂,死亡現(xiàn)場離奇詭異,居然都是意外死亡剂府,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門剃盾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來腺占,“玉大人,你說我怎么就攤上這事痒谴∷ゲ” “怎么了?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵积蔚,是天一觀的道長意鲸。 經常有香客問我,道長尽爆,這世上最難降的妖魔是什么临扮? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮教翩,結果婚禮上杆勇,老公的妹妹穿的比我還像新娘。我一直安慰自己饱亿,他們只是感情好蚜退,可當我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布闰靴。 她就那樣靜靜地躺著,像睡著了一般钻注。 火紅的嫁衣襯著肌膚如雪蚂且。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天幅恋,我揣著相機與錄音杏死,去河邊找鬼。 笑死捆交,一個胖子當著我的面吹牛淑翼,可吹牛的內容都是我干的。 我是一名探鬼主播品追,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼玄括,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了肉瓦?” 一聲冷哼從身側響起遭京,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎泞莉,沒想到半個月后哪雕,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡鲫趁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年热监,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片饮寞。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡孝扛,死狀恐怖,靈堂內的尸體忽然破棺而出幽崩,到底是詐尸還是另有隱情苦始,我是刑警寧澤,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布慌申,位于F島的核電站陌选,受9級特大地震影響,放射性物質發(fā)生泄漏蹄溉。R本人自食惡果不足惜咨油,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望柒爵。 院中可真熱鬧役电,春花似錦、人聲如沸棉胀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至霎挟,卻和暖如春窝剖,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背酥夭。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工赐纱, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人熬北。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓疙描,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蒜埋。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內容

  • 今天看到一篇不錯的文章關于OC內存管理的,轉載一下與你共享概述我們知道在程序運行過程中要創(chuàng)建大量的對象最楷,和其他高級...
    niceSYT閱讀 445評論 0 2
  • pragma mark 多對象內存管理 pragma mark 概念 pragma mark 代碼 Person....
    liyuhong165閱讀 198評論 0 0
  • 概述在iOS開發(fā)中UITableView可以說是使用最廣泛的控件整份,我們平時使用的軟件中到處都可以看到它的影子,類似...
    liudhkk閱讀 9,003評論 3 38
  • 不知道自己在干什么籽孙,當初以為的愛情烈评,其實只是他看來“你好”而已,一心想要找一個成熟的人犯建,但其實自己卻跟不上那個腳步...
    孤獨的云朵閱讀 183評論 0 0
  • 是不是當時我在電話說 你站在那別動 我去找你 見面的時候給你一個大大的擁抱 我們是不是就會有一個不一樣的結局 不一...
    晴天兔子閱讀 178評論 0 0