美文网首页iOS 开发继续加油iOS面试
oc--alloc和 init,为什么init后内存地址变了

oc--alloc和 init,为什么init后内存地址变了

作者: 紫云夕月 | 来源:发表于2016-08-25 17:01 被阅读61次

    alloc是开辟一个内存空间

    init是初始化

    self=[super init]如果不为nil,就重新分配内存空间,这就解释了为什么 NSString,NSArray的调用alloc]init]方法后,内存地址会不一样,

    但是NSObject为什么会一样哪,我们知道NSObject是一切类的基类,当[[NSString alloc]init]执行时, 调用的[super init]就是 NSObject中的init方法,既然NSObject身为基类,他也就无法调用super init, 所以 当NSObject执行 [[NSObject alloc]init]时,也就没有了init重新分配空间这一环节

    至于苹果公司为什么初始化一个实例要分两步,我个人认为是方便构造后初始化不同的方法,如果用 new关键字,只能调用一个init,而不能调用initwithname等方法.

    知识拓展:

    NSString alloc之后,没有init,那么这部分alloc后的内存空间可不可以用?答案是显而易见的,如果可以用,苹果公司也就没必要提供一个init方法,那么alloc后的指针称为什么哪? 悬挂指针.

    如果一个地方指针既不为空,也没有被设置为指向一个已知的对象,则这样的指针称为悬挂指针。在程序里面是很危险的事.

    当程序运行使用该指针时,程序不能判断指针的合法性,将会产生很严重的错误。

    相关文章

      网友评论

        本文标题:oc--alloc和 init,为什么init后内存地址变了

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