黑马程序员技术交流社区

标题: OC中的class [打印本页]

作者: CornerFly    时间: 2015-5-14 18:08
标题: OC中的class
Person *p = [[Person alloc] init];
class c = [p class];
Person *p1 = [c new];
以上最后一句和Person *p1 = [[c new] init];
有什么不同呢?
作者: 丶浩浩丶    时间: 2015-5-14 20:18
本帖最后由 丶浩浩丶 于 2015-5-14 20:20 编辑

Person *p = [[Person alloc] init];这句你应该很了解,就是分配空间然后初始化

//个人理解:用对象去调用class方法([p class]),返回的就是创建这个对象的类.因为p是person创建的,所有p调用class返回的就是Person
class c = [p class];-->  [p class]这个方法返回的就是Person类, 现在c就是一个类对象.(你现在可以认为c就是Person) //Class内部是自带*的,所以不用加*这个符号

Person *p1 = [c new];-->因为现在c就是Person,所以[c new]就相当于是[person new];

Person *p1 = [[c new] init];  但是这句应该就不太对吧.调用new就相当于是 [[c alloc] init].你这么写的话应该就是这样了[[[c alloc] init] init];你这样算是把他初始化两次了.我不清楚这样会不会报错或是警告.但是这个写法看起来就不对.

(上面只是个人学习经验,要是有什么不对,谅解谅解..大体应该就是这么样)
发表完看了下,挺啰嗦的.耐心看下把.  希望楼下有更好的解答

作者: 猴子啊猴子    时间: 2015-5-15 10:11
看了楼上的.学习了
作者: yuang4074    时间: 2015-5-15 15:49
[c new] 是个对象,怎么能用对象产生对象呢???你是错误写法
作者: CornerFly    时间: 2015-5-15 20:59
丶浩浩丶 发表于 2015-5-14 20:18
Person *p = [ init];这句你应该很了解,就是分配空间然后初始化

//个人理解:用对象去调用class方法(),返回 ...

我也觉得最后一句的[[c new]  init].不对,这是老师的视频里面讲的,我们的理解是一样的,以后尽量不用下面的就是了,我也不清楚最后那句到底对不对。
谢谢了,一起学习了
作者: 丶浩浩丶    时间: 2015-5-15 21:34
CornerFly 发表于 2015-5-15 20:59
我也觉得最后一句的[[c new]  init].不对,这是老师的视频里面讲的,我们的理解是一样的,以后尽量不用下 ...

试了一下 完全没警告..多次初始化
作者: su199325    时间: 2015-5-15 22:30
alloc 和init就等于new简单说,class中封装了*,然后你要清楚什么是类方法,这里面就是你的Person




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2