亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Objective-C知識總結(3)

2019-11-14 18:38:06
字體:
來源:轉載
供稿:網友

手動內存管理MRC

首先介紹一下引用計數器:用來保存當前對象有幾個東西在使用它(數字)

引用計數器的作用:用來判斷對象是否應該回收內存空間(如果對象不等于nil,當引用計數器為0,此時要回收對象的內存空間)

引用計數器的操作:

  • retain    使得引用計數器+1

  • release   使的引用計數器-1

  • retainCount  得到引用計數器的值

如果一個對象被釋放的時候,會調用該對象的dealloc方法

注意:

  • dealloc方法是NSObject 的,一般我們要重寫dealloc方法
  • 在dealloc 方法的內部,要調用 [super dealloc];

內存管理的范圍:

  • 所有的集成了NSObject的對象的內存管理

  • 基本數據類型(int double float char struct enum )的數據內存不需要我們進行管理

內存管理的原則:

  1. 如果對象有人使用,就不應該回收  

    如果你想使用這個對象,應該讓這個對象 retain一次  

    如果你不想使用這個對象了,應該讓這個對象 relase一次

  2. 誰創建 誰release

  3. 誰 retain 誰 release

內存管理研究的內容:

  1. 野指針:

      1)定義的指針變量沒有初始化     2)指向的空間已經被釋放

  2. 內存泄露:

    {             Person *p  = [Person new];              }/*             p 棧區             [Person new];  堆區              如果棧區的p已經釋放了,而堆區的空間還沒有釋放,堆區的空間就被泄露了*/

set方法內存管理

//  Dog* _dog; //  對于對象作為另外一個類的實例變量 - (void)setDog:(Dog*)dog {  //  判斷對象是否是原對象        if(_dog != dog) {            //2) release舊值           [_dog release];             // retain 新的值,并且賦值給實例變量           _dog = [dog retain];        }    }

循環retain問題

循環的retain 會導致兩個對象都會內存泄露

防止方法:

  1. 讓某個對象多釋放一次 (注意順序)

  2. 一端使用 assign   一端使用retain(推薦使用)

NSString類的內存管理問題

#import <Foundation/Foundation.h>int main(int argc, const char * argv[]) {    @autoreleasepool {                //定義字符串        //字符串的常量池,        //如果你需要的字符串在常量池中已經存在了,不會分配內存空間        //使用字符串的時候,        // @"abc"  stringWithString    alloc initWithString  都在常量區//                //0x100001030 小        NSString *str1 = @"abc";   //@"abc" 字符串的常量        NSString *str3 = [NSString stringWithString:@"abc"];   //常量區        NSString *str5 = [[NSString alloc] initWithString:@"abc"]; //也在常量區        NSString *str6 = [[NSString alloc] init];//常量區        str6 = @"abc";                //0x100202030 大        //如果在常量區 str2  str4 地址應該是一樣的        //實際上不一樣的,所以 str2 str4都在堆區        NSString *str2 = [NSString stringWithFormat:@"abc"];   //不是在棧區,在堆區        NSString *str4 = [[NSString alloc] initWithFormat:@"abc"];//不是在棧區,在堆區                        //0x7fff5fbff764        int a = 10;  //棧區                NSLog(@"str1 = %@,%p,%lu",str1,str1,str1.retainCount);        NSLog(@"str2 = %@,%p,%lu",str2,str2,str2.retainCount);        NSLog(@"str3 = %@,%p,%lu",str3,str3,str3.retainCount);        NSLog(@"str4 = %@,%p,%lu",str4,str4,str4.retainCount);        NSLog(@"str5 = %@,%p,%lu",str5,str5,str5.retainCount);        NSLog(@"str6 = %@,%p,%lu",str6,str6,str6.retainCount);        NSLog(@"a = %p",&a);                    }    return 0;}

自動釋放池 :特殊的棧結構

特點: 

  • 對象可以加入到自動釋放池中
  • 自動釋放池結束的時候,會給池中的對象發送一條 release消息

自動釋放池的使用:

  1. 創建自動釋放池
      @autoreleasepool {      }

     2.  加入自動釋放池

/*  在自動釋放池中  [對象  autorelease];*/

模擬一個Person類 類中有個一個對象方法- (void)run;

#import <Foundation/Foundation.h>#import "Person.h"int main(int argc, const char * argv[]) {    //1 創建自動釋放池    Person *p = [Person new];  // p  1    @autoreleasepool {//自動釋放池開始                [p run];         NSLog(@"%lu",p.retainCount); // 1                // [p autorelease] 把對象p加入到自動釋放池中        // 注意:加入到自動釋放池中以后, 引用計數不會變化        [p autorelease];  //加入自動釋放池,        NSLog(@"%lu",p.retainCount); // 1                [p run];            }//自動釋放池結束   [p release];    [p run];    return 0;}

 我們可以給Person添加一個類方法,讓其創建完對象就加入到自動釋放池中

+(instancetype)person{    //Person person  ---> Person    //Stduent person ----> Student    //創建對象    return [[[self alloc] init] autorelease];  // 返回的時對象的空間    // 能夠幫我們把對象給加入到自動釋放池}

 

     

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
粉嫩av一区二区三区免费野| 最新亚洲国产精品| 亚洲第一福利网| 国产成人精品av在线| 91精品国产91久久久久久吃药| 日韩亚洲欧美成人| 中文字幕国产亚洲2019| 久久精品亚洲94久久精品| 视频一区视频二区国产精品| 久久久999国产精品| 精品欧美激情精品一区| 亚洲综合在线播放| 国产精品普通话| 精品人伦一区二区三区蜜桃网站| 亚洲高清色综合| 亚洲精品免费av| 日韩欧美亚洲综合| 国产精品中文久久久久久久| 亚洲人高潮女人毛茸茸| 国产主播喷水一区二区| 亚洲97在线观看| 97在线观看视频| 亚洲成人精品视频| 亚洲男人第一av网站| 国产精品久久久久7777婷婷| 中文字幕日韩在线播放| 久热精品视频在线观看一区| 亚洲视频在线播放| 日韩欧美主播在线| 亚洲欧美变态国产另类| 欧美性猛交xxxx富婆弯腰| 这里只有视频精品| 国产精品成人品| 久久久国产精品x99av| 国模视频一区二区三区| 国产成人精品一区二区在线| 国产美女久久久| 日本中文字幕成人| 亚洲在线观看视频网站| 色综合久综合久久综合久鬼88| 日韩在线视频线视频免费网站| 国内精品久久久久久久久| 亚洲精品视频播放| 国产成人免费91av在线| 国产成人午夜视频网址| 亚洲欧美国产日韩中文字幕| 国产精选久久久久久| 88国产精品欧美一区二区三区| 伊人青青综合网站| zzijzzij亚洲日本成熟少妇| 久久视频国产精品免费视频在线| 欧美成人sm免费视频| 欧美黑人国产人伦爽爽爽| 亚洲人成伊人成综合网久久久| 丝袜亚洲另类欧美重口| 精品福利视频导航| 日韩a**中文字幕| 色综久久综合桃花网| 欧美特级www| 欧美成人一二三| 成人xxxxx| 欧美在线精品免播放器视频| 91免费观看网站| 97在线免费观看视频| 欧美日韩性视频| 日本视频久久久| 国产91精品高潮白浆喷水| 中文字幕亚洲一区在线观看| 97精品在线观看| 欧日韩在线观看| 国产综合福利在线| 欧美成人精品三级在线观看| 亚洲аv电影天堂网| 青草热久免费精品视频| 欧美精品少妇videofree| 国内精品小视频| 国产欧美亚洲精品| 欧美电影电视剧在线观看| 亚洲国产福利在线| 欧美性在线观看| 免费91麻豆精品国产自产在线观看| 欧美性xxxxxx| 日韩美女免费线视频| 久久久国产精彩视频美女艺术照福利| 91高潮在线观看| 亚洲天堂男人的天堂| 亚洲第一av在线| 亚洲美腿欧美激情另类| 视频一区视频二区国产精品| 欧美巨乳在线观看| 97欧美精品一区二区三区| 国产精品网站视频| 欧洲成人免费aa| 亚洲男人天堂古典| 日韩黄色av网站| 亚洲综合色av| 国内精品久久久久| 久久成年人免费电影| 性色av一区二区三区| 精品人伦一区二区三区蜜桃网站| 日本精品久久电影| 欧美成人sm免费视频| 成人免费网视频| 日本一区二区三区四区视频| 国产欧美婷婷中文| 国产精品久久久久久久久久| 国产精品一区二区性色av| 91精品在线国产| 欧美在线视频免费| 另类视频在线观看| 国产视频精品久久久| 国产视频欧美视频| 国产精品美乳一区二区免费| 亚洲天堂精品在线| 国产精品视频1区| 韩日欧美一区二区| 精品久久久久人成| 国产成人啪精品视频免费网| 91久久精品美女高潮| 欧美自拍视频在线观看| 欧美日韩国产999| 91网站在线免费观看| 国产精品久久久久久久久男| 国产精品美女视频网站| 成人免费高清完整版在线观看| 国产日本欧美在线观看| 亚洲精品一区av在线播放| 日韩欧美主播在线| 欧美壮男野外gaytube| 欧美伦理91i| 国产91精品久久久久久| 日av在线播放中文不卡| 欧美精品一区在线播放| 欧美色xxxx| 日韩欧美999| 欧美人与性动交a欧美精品| 一本一道久久a久久精品逆3p| 久久免费精品视频| 欧美亚洲免费电影| 一区二区三区视频免费| 日韩精品在线第一页| 在线亚洲男人天堂| 91精品国产高清| 亚洲精品理论电影| 亚洲电影第1页| 亚洲成**性毛茸茸| 国产成人高清激情视频在线观看| 欧美极品少妇xxxxⅹ裸体艺术| 亚洲欧美日韩第一区| 69av视频在线播放| 激情av一区二区| 国产精品女人网站| 国产精品v日韩精品| 亚洲一区二区在线播放| 国产精品91久久久久久| 久久99热精品| 久久精品国产亚洲| 久色乳综合思思在线视频| 亚洲欧美一区二区三区在线| 日韩精品视频免费在线观看| 国产精品亚洲综合天堂夜夜| 91免费欧美精品| 欧美成人性生活| 亚洲免费人成在线视频观看|