zoukankan      html  css  js  c++  java
  • objective-c(初始化)

    objective-c(初始化)

     


    创建对象
     (编程语言 Objective-C 2.0)

     

    1.类对象与实例化

              类的定义完成后,编译器在内存中自动生成唯一的类对象,实例对象都是通过调用类对象的类方法生成的

              类对象是工厂,同时也是蓝图,实例对象是产品

     

     创建对象的基本步骤

     

    使用 Objective-C创建对象需要两个基本步骤:

      

     

    Allocation(内存分配)   :为新的对象动态分配一段内存地址 

    Initialization(初始化):为这段内存空间中填上合适的初始值

     

        

        只有这两个步骤都完成后,这个对象才能够真正的开始行使功能

        创建对象的基本步骤

        两个步骤在代码中是分别完成的 但是通常我们将它们合起来一次完成:

        id anObject = [[Rectangle alloc] init];

        将创建对象的两个步骤分开使得我们可以对这两步过 程分别进行控制内存分配

     

    2.初始化方法的返回值

     

        Allocating Objective-C  NSObject 中,

        提供了两个默认内存分配方法:

        +alloc

        +allocWithZone:isa

        内存分配方法初始化了新对象的

        变量,并将其它所 内存分配方法不应该被复写或进行改动

     

        有变量的值都置为初始化方法的返回值

        通常情况下,初始化方法对接收方对象的实例变量进 行初始化,然后将对象本身返回

        初始化方法的主要职责是要保证它返回的对象在使用 时不会出现错误初始化方法的返回值

         

        但有时,初始化方法无法正常执行它被要求执行的功 能

        1:文件访问错误 有时,初始化方法返回的对象并不是接收者对象本身

      

        2:对象重名

       

        

        基于上述原因,程序应当使用由初始化方法返回的对 象,而不是直接使用由内存分配方法返回的对象

        下面的代码是非常危险的,因为它完全忽视了初始化方法的返回值状态:isa

        id anObject = [SomeClass alloc]; 

        [anObject init]; 

        [anObject someOtherMessage];

        

        为了安全地初始化新对象,应该把内存分配方法和初 始化方法结合起来使用:

        id anObject = [[SomeClass alloc] init]; 

        [anObject someOtherMessage];

        

        如果初始化方法有可能返回nil,则还需要做检查处

        理:

        id anObject = [[SomeClass alloc] init]; 

        if ( anObject )

             [anObject someOtherMessage];

        else ...

     

    3.初始化方法的实现

        

        当新对象被创建伊始,除了它的

        变量外,它在内存中的所有位都被置

        有时,这样的初始化对于一个对象来说就够用了

        但绝大多数的时候,还需要对对象的其它变量赋予初 始值才能保证它能够开始被使用

        在这些情况下,需要实现自定义初始化

     

     

  • 相关阅读:
    Ant Design Pro:Layout 组件——嵌套布局
    React实战之将数据库返回的时间转换为几分钟前、几小时前、几天前的形式。
    React实战之Ant Design—Upload上传_附件上传
    React实战之60s倒计时按钮(发送短信验证按钮)
    map方法到底会不会改变原始数组?
    【React】react开发vscode插件推荐
    【React】React 工程的 VS Code 插件及配置
    【React】react新特性实例详解(memo、lazy、suspense、hooks)
    数组常用slice和splice的区别
    【React】react-beautiful-dnd 实现组件拖拽
  • 原文地址:https://www.cnblogs.com/iOS-mt/p/4127190.html
Copyright © 2011-2022 走看看