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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Littlekin 中级黑马   /  2014-6-16 16:12  /  1994 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 Littlekin 于 2014-6-17 23:44 编辑

#import <Foundation/Foundation.h>
#import "Student.h"
int main(int argc, const char * argv[])
{
    @autoreleasepool {
       Student *stu = [Student alloc]; //给对象分配内存
        stu = [stu init];  //这句话相当于javanew实例化,可以理解
        [stu release];
    }
    return 0;
}
问题:Student *stu = [Student alloc];根据指针知识,这句话是不是返回一个内存地址啊,就跟
int a; int *p = &a;这样啊,[Student alloc]这个方法返回的是一个对象,然后Student *stu = &对象;  这个意思啊?求大神解答。

评分

参与人数 1技术分 +1 收起 理由
傘が咲く + 1

查看全部评分

4 个回复

正序浏览
我们先来说说原先如何创建对象
[Person new]

这个里面的new 包含了alloc  和 init 这两个
但为什么不用new 而很麻烦的用alloc 和init 呢。

这是因为 new 他的初始化是固定死的,默认值是0;

而【[ Person alloc】init】中init 她可以重写,可以改变初始化的值。
alloc 他的含义是分配存储空间给对象,他在NSObject中定义是 + (id)alloc

而id 是万能指针,相当于NSObject * ,他可以指向/操作任何oc对象

回复 使用道具 举报 1 0
学习中 啊
回复 使用道具 举报
alloc 方法返回的不是对象, 而是 id 类型的变量, 它可以指向任何类型的对象, 它本身是个对象指针. 所以我觉得 [Student alloc] 应该是分配了一块存储空间给一个Student对象, 并返回一个id指针, 然后把这个指针的值 (即Student对象的地址) 赋给了stu.
回复 使用道具 举报
也可以这样理解!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马