您的位置:首页 > 移动开发 > Objective-C

面向对象-对象通俗解释[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]; //初始化对象

创建对象虽然有一块内存,但是里面是垃圾数据,需要初始化才能使用。

这里顺便提下,属性就是描述对象的名词性东西,如姓名,姓名的属性值是小明, 行为就是动词性东西,如跑。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: