面向对象-对象通俗解释[Objective-C代码]

因为有许多朋友问,每次都要说很多,所以干脆就写出来,都是大白话,目的只有一个就是弄懂。


           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];                                            //初始化对象

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

                         

                       这里顺便提下,属性就是描述对象的名词性东西,如姓名,姓名的属性值是小明, 行为就是动词性东西,如跑。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值