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

标签 ios objective-c automatic-ref-counting

  • 当我多次分配 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/

    相关文章:

    objective-c - 用于 iOS ARC 问题的 BWDB SQLite 包装器

    ios - NSClassFromString 行为不当和缓存类

    ios - 创建网格线并允许用户打开/关闭网格线 View

    ios - 使用 AVCaptureDevice 读取条形码,我想在扫描后立即显示动画 ActivityIndi​​cator

    ios - 将 ViewController 设置为彼此重叠且不透明。

    ios - 将消息从父 View Controller 发送到容器 View

    objective-c - 如何在 Objective-C 中比较两个日期

    iphone - 线程安全的保留/释放

    objective-c - 为什么 ARC 会将这个 block 复制到堆中?

    memory - 场景多的 Cocos2D 项目没有正确释放内存