真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

內(nèi)存管理高級(jí)--代碼-創(chuàng)新互聯(lián)

創(chuàng)建Person類,添加兩個(gè)屬性,實(shí)例方法,便利構(gòu)造器,和一個(gè)無返回值方法

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、成都小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了靈石免費(fèi)建站歡迎大家使用!

main.m中

#import 
#import "Person.h"
int main(int argc, const char * argv[])
{
    @autoreleasepool {
        
        NSString *name = [[NSString alloc] initWithFormat:@"劉亞方"]; //name開辟空間
        Person *p = [[Person alloc] init];  //類開辟空間
        
        [p setName:name]; //p-->name   (.m中 ,,_name = name;|)
        [name release];   //  釋放name ...那么p就變成了野指針,,,解決方法[name retain]
        NSString *newName = [[NSString alloc] initWithFormat:@"六小二"];//重新定義空間newName
        [p setName:newName];  // p-->newName內(nèi)存泄漏。。。。原來的name沒有指向了,解決方法 [_name release];
        [p sayHi];       //如果是在常量區(qū),兩個(gè)地址一樣的時(shí)候。那么就要加個(gè)判斷,如果一樣就直接使用if (_name != name){},如果不一樣就清空,然后retain。。。
        
        [p release];
          //疑問?始終有一塊內(nèi)存沒有釋放掉。。。。。。。
        //野指針(指針指向空內(nèi)存)  - [retain]  ---
        //重新定義-- 內(nèi)存泄漏(原來的name沒有指針指向)。解決方法 [_name release];   原來的_name = nil  那么[_name release];  相當(dāng)于什么都沒有做
        //這里是在常量區(qū),兩個(gè)地址一樣的時(shí)候。那么就要加個(gè)判斷,如果一樣就直接使用if (_name != name){}
    }
    return 0;
}

Person. h中

#import 
@interface Person : NSObject
@property (nonatomic , copy)NSString *name;
@property (nonatomic , assign)NSInteger age;
- (instancetype)initWithName:(NSString *)name age:(NSInteger)age;
+ (instancetype)personWithName:(NSString *)name age:(NSInteger)age;
- (void)sayHi;
@end

Person.m中

#import "Person.h"

@implementation Person
@synthesize name = _name;
@synthesize age = _age;
- (void)dealloc
{
    [_name release];
    [super dealloc];
}
//- (void)setName:(NSString *)name
//{
//    [_name release];
//    _name = [name retain];
//}
- (void)setName:(NSString *)name
{
    if (_name != name) {  //這里是在常量區(qū),兩個(gè)地址一樣的時(shí)候。那么就要加個(gè)判斷,如果一樣就直接使用
        [_name release];
        _name = [name copy];
    }
}
- (instancetype)initWithName:(NSString *)name age:(NSInteger)age
{
    self = [super init];
    if (self) {
        self.name = name;
        self.age = age;
    }
    return self;
}
+ (instancetype)personWithName:(NSString *)name age:(NSInteger)age
{
    Person *p = [[Person alloc] initWithName:name age:age];
    return [p autorelease];   //用完后,遇到autoreleasepool池自動(dòng)釋放;
//    return [[[Person alloc] initWithName:name age:age] autorelease];   //也可以這樣簡寫
}
- (void)sayHi
{
    NSLog(@"name :%@",_name);
}
@end

任何一個(gè)對象都有一個(gè)或多個(gè)擁有者,只要有一個(gè)對象指向他就一直存在,  如果對象沒有擁有者,那么這個(gè)運(yùn)行時(shí)系統(tǒng)自動(dòng)銷毀,為了保證清楚你的內(nèi)存,定下以下法則:

  1.  你擁有任何你創(chuàng)建的對象---

  2. 你使用來retain就可以獲得這個(gè)對象的所有權(quán) -valid

  3. 當(dāng)你不再使用你創(chuàng)建的對象的時(shí)候,你必然把所有權(quán)歸還回去。。(release)(autorelease)兩種方式   “releasing” an object.

  4. 你不能釋放你沒有擁有的對象  //You must not relinquish ownership of an object you do not own

1.內(nèi)存管理的黃金法則:The basic rule to apple is everything thatincreases the reference counter with alloc,[mutable]copy[WithZone:] or retain is in charge of the corresponding [auto]release. 即:如果一個(gè)對象使用了alloc,[mutable] copy,retain,那么你必須使用相應(yīng)的release或autonrelease.

2.規(guī)則:

1、Objective-C類中實(shí)現(xiàn)了引用計(jì)數(shù)器,對象知道自己當(dāng)前被引用的次數(shù)

2、最初對象的計(jì)數(shù)器為1

3、如果需要引用對象,可以給對象發(fā)送一個(gè)retain消息,這樣對象的計(jì)數(shù)器就加1

4、當(dāng)不需要引用對象了,可以給對象發(fā)送release消息,這樣對象計(jì)數(shù)器就減1

5、當(dāng)計(jì)數(shù)器減到0,自動(dòng)調(diào)用對象的dealloc函數(shù),對象就會(huì)釋放內(nèi)存

6、計(jì)數(shù)器為0的對象不能再使用release和其他方法

3.內(nèi)存問題主要有:內(nèi)存溢出 內(nèi)存過渡釋放 野指針 三種

內(nèi)存溢出(內(nèi)存堆積):大量的開辟空間但并不立即釋放,通常是由于使用autorelease產(chǎn)生的.

內(nèi)存過渡釋放:對象將內(nèi)存已經(jīng)還給系統(tǒng),之后再次歸還給系統(tǒng)這時(shí)就會(huì)出現(xiàn)內(nèi)存過渡釋放的問題.

野指針:對象指向的內(nèi)存空間已經(jīng)歸還給系統(tǒng)但此時(shí)再次調(diào)用了指向該指針空間的指針,就會(huì)產(chǎn)生野指針的問題.

4.內(nèi)存管理的形式:MRC (manual reference count) 人工引用計(jì)數(shù)機(jī)制 內(nèi)存的開辟和釋放都有手動(dòng)代碼進(jìn)行控制.ARC(auto reference count )自動(dòng)引用計(jì)數(shù)機(jī)制 不需要人工控制系統(tǒng)自動(dòng)進(jìn)行管理.

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。


網(wǎng)站標(biāo)題:內(nèi)存管理高級(jí)--代碼-創(chuàng)新互聯(lián)
文章網(wǎng)址:http://weahome.cn/article/dioiej.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部