gpt4 book ai didi

ios - 多重分配和零指针分配内存概念

转载 作者:行者123 更新时间:2023-12-01 19:03:49 26 4
gpt4 key购买 nike

  • 当我多次分配 init 一个对象时会发生什么?

  • 例如:
    {
    nssstring * samplestring ;
    samplestring = [[nsstring alloc]init];
    samplestring = [[nsstring alloc]init];
    }

    在此代码之后 block 第一次分配时 samplestring 指向的内存地址是否泄漏?执行?

    这是正常的还是错误的编码习惯。
    ARC 如何处理此 block 执行后的第一次内存分配。

    2.上面的代码有什么不同
    {
    nssstring * samplestring;
    samplestring = [[nsstring alloc]init];
    samplestring = nil;
    }
    Nil是一个对象。对 ?所以这里似乎也是第一个 samplestring内存分配的行为类似于 1 中的代码块。或者 nil在内存管理中具有特殊的意义。

    最后,如果我想使用相同的对象名称,我应该遵循 1 还是 2。

    我是通过手机问这个问题,所以请原谅格式,以防这是重复的。

    最佳答案

    对于 1,当你重新分配一个对象指针时,ARC 会销毁旧对象。同样,如果对象超出范围,它将被销毁

    {
    NSString * samplestring ;
    samplestring =[ [nsstring alloc]init]; // first object created
    samplestring =[ [nsstring alloc]init]; // first destroyed, second created
    } // second object destroyed

    对于 2,这几乎是相同的故事,除了当符号超出范围时没有什么可破坏的:
    {
    NSString * samplestring;
    samplestring =[ [nsstring alloc]init]; // first object created
    samplestring =nil; // first object destroyed
    }

    至于最后,如果我想使用相同的对象名称应该遵循 1 还是 2.,这并不重要,但是 2. 是多余的,因为 ARC 将正确管理对象生命周期。

    最后, nil不是一个对象,它是一个 nil 指针,即指向空的指针。

    关于ios - 多重分配和零指针分配内存概念,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21119863/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com