美文网首页
Objective-C new与alloc/init的区别

Objective-C new与alloc/init的区别

作者: CaptainRoy | 来源:发表于2018-06-13 23:42 被阅读0次
    在OC中创建对象一般使用 [[className alloc] init] , 但是也有一个方法 [className new] , 先了解两者的区别
    • new 的源码
    + new { 
        id newObject = (*_alloc)((Class)self, 0); 
        Class metaClass = self->isa; 
        if (class_getVersion(metaClass) > 1) 
            return [newObject init]; 
        else 
            return newObject; 
    }
    
    • alloc/init 的源码
    + alloc { 
        return (*_zoneAlloc)((Class)self, 0, malloc_default_zone());  
    } 
    
    - init { 
        return self; 
    }
    

    通过上面的源码可以看到 [[className alloc] init] 和 [className new] 差不多,只不过alloc分配内存的时候使用了zone(zone是给对象分配内存的时候,把关联的对象分配到一个相邻的内存区域内,以便于调用时消耗很少的代价,提升了程序处理速度)

    因此建议用 [[className alloc] init] 会比较快,性能也比较好;并且使用 [className new]只能调用init方法,不能调用其它初始化方法

    相关文章

      网友评论

          本文标题:Objective-C new与alloc/init的区别

          本文链接:https://www.haomeiwen.com/subject/fwteeftx.html