*的区别

来源:互联网 发布:linux 建立目录 编辑:程序博客网 时间:2024/06/05 01:59

1.   nsset * s = [ nsset set]

2. person * p = [[person alloc]init]


在2中,是我们经常用的给一个新的对象开辟一个存储空间。先调用person的alloc类方法

在内存中开辟一出一个内存空间。并把这个空间命名为p,并且把person的指针指向p,这样p就获得了person类中定义的所有对象方法。(也包括他的父类的对象方法。)


在1中,nsset 调用自己的类方法(set)。并将其赋予了s,s接受了nsset的指针,并获得了来自nsset类中的所有对象方法。


= 等号的赋予,应该是指效果上的赋予。比如2中,是把开辟出来的内存空间,这个效果赋予了p。

同理,在1中,s只是获得了 nsset通过调用set这个类方法后产生的效果和产物。给予给了s。并不代表s通过这样类方法被赋予了方法。


过去可能有的误区:


(类名class*对象object)不是每一次有对象就必须有个自己的空间,这样才能实现类中的对象方法的调用。并非是如此。在1中,s同样继承了类的对象方法。开辟一个内存空间并不是所有对象产生的第一步。

只要通过类方法的调用后,对象就会产生,并得到这个类方法所产生的效果和产物。



```````学习中想不通的地方,自己辩解了一下。不知道对不对。随手写了想法吧


2016.4.5

---------------------------------------


是不是因为set的类方法中已经把alloc这个类方法封装进去了。在调用时看不到而已。

之前的说法感觉解释不通,如果没有这样开内存给对象,后面的调用对象方法产生的数据要如何去保存?


可能set类方法中已经把alloc封装进去,同时init初始化的时候给予了自己需要的方法和效果。   毕竟nsset也是继承自nsobject。


````自学好累```




0 0
原创粉丝点击