面向对象-对象通俗解释[Objective-C代码]
2013-04-18 19:20
288 查看
因为有许多朋友问,每次都要说很多,所以干脆就写出来,都是大白话,目的只有一个就是弄懂。
Person * xiaoMing =[ [Person alloc] init];
首先,我从这句代码开始,上述代码分解为3步:
1)Person *xiaoMing; //为对象起名字,只是名字
2) xiaoMing=[ Person alloc ]; //创建对象
3) [xiaoMing init]; //初始化对象
下面对每一句进行通俗解释:
1)Person *xiaoMing;
创建一个对象的时候,首先系统根据你起的名字xiaoMing在栈区创建一个叫xiaoMing的这么个一个指针;
注意我这么写其实是有问题的,在初始化指针的时候没有赋值,最好赋值为空指针。
Person * xiaoMing = nil; //C语言中用NULL
现在,对象名字就起好了,为什么要用指针?它是对象么?
现在来说,它还不是对象。通过alloc在堆内存中生成的才是对象,只不过没有指针的标识,你不便于找到生成的对象,因为堆内存块在计算机里使用十六进制码标记的,这是不便于记忆的,所以需要指针,xiaoMing很好记吧?但是0xFE35 好记么? 这是为什么用指针。其实指针就是地址,只不过起了个别名。
为什么还不是对象? 如果栈是一个户口登记表的话,上面的xiaoMing 就是一个标识,对象是什么?是他这个人,只不过为了标记他区别他人有了xiaoMing。
例子:
天安门只是一个标记,天安门那个地方才是对象,看得见摸得着的。
天安门的作用就是别名而已,如果你跟朋友说你去了“那个地方” ,谁晓得你去了哪里?但是你跟朋友说你去了天安门,他们就会根据天安门的地址去那个地方。同样,xiaoMing指针会根据指针里面存的 xiaoMing对象的内存地址 找到xiaoMing对象。
所以说,xiaoMing对象 不是在栈区的那个标识,而是堆区的那个内存块。
2) xiaoMing=[ Person alloc ]; //创建对象
创建对象的过程其实就是在堆中开辟一块内存,再把这块内存的地址给xiaoMing指针。如上图中绿色框内。
3) [xiaoMing init]; //初始化对象
创建对象虽然有一块内存,但是里面是垃圾数据,需要初始化才能使用。
这里顺便提下,属性就是描述对象的名词性东西,如姓名,姓名的属性值是小明, 行为就是动词性东西,如跑。
Person * xiaoMing =[ [Person alloc] init];
首先,我从这句代码开始,上述代码分解为3步:
1)Person *xiaoMing; //为对象起名字,只是名字
2) xiaoMing=[ Person alloc ]; //创建对象
3) [xiaoMing init]; //初始化对象
下面对每一句进行通俗解释:
1)Person *xiaoMing;
创建一个对象的时候,首先系统根据你起的名字xiaoMing在栈区创建一个叫xiaoMing的这么个一个指针;
注意我这么写其实是有问题的,在初始化指针的时候没有赋值,最好赋值为空指针。
Person * xiaoMing = nil; //C语言中用NULL
现在,对象名字就起好了,为什么要用指针?它是对象么?
现在来说,它还不是对象。通过alloc在堆内存中生成的才是对象,只不过没有指针的标识,你不便于找到生成的对象,因为堆内存块在计算机里使用十六进制码标记的,这是不便于记忆的,所以需要指针,xiaoMing很好记吧?但是0xFE35 好记么? 这是为什么用指针。其实指针就是地址,只不过起了个别名。
为什么还不是对象? 如果栈是一个户口登记表的话,上面的xiaoMing 就是一个标识,对象是什么?是他这个人,只不过为了标记他区别他人有了xiaoMing。
例子:
天安门只是一个标记,天安门那个地方才是对象,看得见摸得着的。
天安门的作用就是别名而已,如果你跟朋友说你去了“那个地方” ,谁晓得你去了哪里?但是你跟朋友说你去了天安门,他们就会根据天安门的地址去那个地方。同样,xiaoMing指针会根据指针里面存的 xiaoMing对象的内存地址 找到xiaoMing对象。
所以说,xiaoMing对象 不是在栈区的那个标识,而是堆区的那个内存块。
2) xiaoMing=[ Person alloc ]; //创建对象
创建对象的过程其实就是在堆中开辟一块内存,再把这块内存的地址给xiaoMing指针。如上图中绿色框内。
3) [xiaoMing init]; //初始化对象
创建对象虽然有一块内存,但是里面是垃圾数据,需要初始化才能使用。
这里顺便提下,属性就是描述对象的名词性东西,如姓名,姓名的属性值是小明, 行为就是动词性东西,如跑。
相关文章推荐
- iOS笔记之Objective - c 面向对象概念的解释
- 面向对象思想小案例——银行存取款代码示例static类属性运用
- 面向对象写的 五子棋(一贯作风::懒)代码懒的规范
- 面向对象解释
- javascript面向对象特性代码实例
- 面向对象中多态和泛型的关系(可以解释为什么说 iterator方法中有多态存在 )
- java学习日记_27:面向对象之main方法格式详细解释
- 面向对象--静态代码块
- Java面向对象基础--代码块
- 面向对象之类的设计_代码大全笔记(二)
- 黑马程序员——Objective-C基础——面向对象语法04
- 关于.NET及面向对象中一些概念的解释
- PHP OOP面向对象详细介绍总结(代码实例子)
- 怎么跟妻子解释面向对象
- 把IDL说明编译成面向对象程序设计语言的实代码后
- 看百度提供的云推送服务端sdk代码有感面向对象和面向过程编码思维的区别
- 面向对象之代码复用规则
- Objective-C 面向对象基础-类
- 面向对象 JAVA代码
- [转] 面向对象软件开发和过程(一): 代码是核心