A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© CornerFly 中级黑马   /  2015-5-14 18:08  /  1168 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Person *p = [[Person alloc] init];
class c = [p class];
Person *p1 = [c new];
以上最后一句和Person *p1 = [[c new] init];
有什么不同呢?

6 个回复

倒序浏览
本帖最后由 丶浩浩丶 于 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];你这样算是把他初始化两次了.我不清楚这样会不会报错或是警告.但是这个写法看起来就不对.

(上面只是个人学习经验,要是有什么不对,谅解谅解..大体应该就是这么样)
发表完看了下,挺啰嗦的.耐心看下把.  希望楼下有更好的解答
回复 使用道具 举报
看了楼上的.学习了
回复 使用道具 举报
[c new] 是个对象,怎么能用对象产生对象呢???你是错误写法
回复 使用道具 举报
丶浩浩丶 发表于 2015-5-14 20:18
Person *p = [ init];这句你应该很了解,就是分配空间然后初始化

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

我也觉得最后一句的[[c new]  init].不对,这是老师的视频里面讲的,我们的理解是一样的,以后尽量不用下面的就是了,我也不清楚最后那句到底对不对。
谢谢了,一起学习了
回复 使用道具 举报
CornerFly 发表于 2015-5-15 20:59
我也觉得最后一句的[[c new]  init].不对,这是老师的视频里面讲的,我们的理解是一样的,以后尽量不用下 ...

试了一下 完全没警告..多次初始化
回复 使用道具 举报
alloc 和init就等于new简单说,class中封装了*,然后你要清楚什么是类方法,这里面就是你的Person
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马