黑马程序员技术交流社区

标题: Student *stu = [Student alloc];求详解 [打印本页]

作者: Littlekin    时间: 2014-6-16 16:12
标题: Student *stu = [Student alloc];求详解
本帖最后由 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 = &对象;  这个意思啊?求大神解答。

作者: huangqiwa    时间: 2014-6-16 17:27
也可以这样理解!
作者: liulinjie    时间: 2014-6-16 18:04
alloc 方法返回的不是对象, 而是 id 类型的变量, 它可以指向任何类型的对象, 它本身是个对象指针. 所以我觉得 [Student alloc] 应该是分配了一块存储空间给一个Student对象, 并返回一个id指针, 然后把这个指针的值 (即Student对象的地址) 赋给了stu.
作者: 陈超众    时间: 2014-6-16 20:42
学习中 啊
作者: m573555543    时间: 2014-6-16 23:11
我们先来说说原先如何创建对象
[Person new]

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

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

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

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






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