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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

2.创建对象
1> 在Java中是使用关键字new来创建对象,比如new Student(),其实这句代码做了2件事:

给对象分配存储空间
调用Student的构造方法进行初始化
2> 在OC中创建对象也需要按顺序做上面所述的2件事

1)调用Student类的静态方法alloc分配存储空间
Student *stu = [Student alloc];
OC是方法调用是用中括号[ ],方法调用者写在括号左侧,方法名写在括号右侧,中间留点空格。因此上面是调用了Student类的静态方法alloc。
上面调用的alloc方法会返回分配好内存的Student对象,在等号左边用了一个指向Student类型的指针变量stu来接收这个对象,注意stu左边的*号。所有OC对象都是用指针变量来接收的,如果你不了解指针,你记住下面这点就行了:利用类名定义一个变量时,类名后面一定要带个*号。
alloc方法是这样声明的:
+ (id)alloc;
可以看到,它的返回值类型是id,这个id代表任何指针类型,你可以暂时理解为:id可以代表任何OC对象,类似于NSObject *。
2)调用Student对象的构造方法init进行初始化
前面调用alloc方法返回的Student对象stu是不能正常使用的,因为仅仅是分配了内存,并没有进行初始化,接下来调用对象的init方法进行初始化
stu = [stu init];
看清楚了,由于init是动态方法,所以这里使用stu变量来调用,并不是使用类名来调用。init会返回已经初始化完毕的对象,再次赋值给了stu变量。这时候的Student对象stu才能正常使用。
3)其实,我们最常见的做法是将alloc和init连起来使用:
Student *stu = [[Student alloc] init];
相信有面向对象开发经验的你一眼就能看懂了,在main.m完整代码的第7行。
3.销毁对象
由于OC不支持垃圾回收,因此当不再使用某个对象时,需要调用对象的release方法释放此对象。我们在第9行销毁了stu对象。
[stu release];
这个release方法在这里调用一次即可,不要觉得多调用多几次,对象就会释放地干净一点,这样做会很危险,容易造成野指针错误。
4.其他
1> 也可以调用静态方法new快速创建一个对象
1 Student *stu = [Student new];23 [stu release];
不过我们还是习惯使用alloc和init来创建对象
2> 前面我们调用了Student的alloc、init、new方法,但是你会发现Student.h中并没有声明这些方法,为什么能够调用呢?原因很简单,这些方法都是父类NSObject的,子类当然可以调用父类的方法。
回到顶部
八、访问公共成员变量和方法
前面已经成功创建了一个Student对象,接下来访问一下它的公共变量和方法。
复制代码
1#import 2 #import " Student.h " 3 4 int main( int argc, const char * argv[]) 5 { 6 @autoreleasepool { 7 Student *stu = [[Student alloc ] init]; 8 9 // 访问公共变量no 10 stu ->no = 10 ; 11 12 // 调用setAge:方法设置变量age的值 13 [stu setAge: 27 ]; 14 15 // 调用setAge:andHeight:方法同时设置变量age和height的值 16 [stu setAge: 28 andHeight: 1.88f ]; 17 18 // 访问公共变量no 19 int no = stu -> no; 20 // 调用age方法获取变量age的值 21 int age = [stu age]; 22 23 // 打印no和age的值 24 NSLog( @" no is %i and age is %i " , no, age); 25 26 [stu release]; 27 } 28 return 0 ; 29 }
复制代码
1.第7行创建了Student对象,第26行销毁了对象
2.第10行和第19行访问了Student对象的公共成员变量no,如果不是公共变量,不能像这样直接访问。注意访问方式:对象->成员变量
3.第13行调用了Student对象的setAge:方法,传入参数27修改了成员变量age的值
4.第16行调用了Student对象的setAge:andHeight:方法,同时修改了成员变量age和height的值
5.第21行调用了Student对象的age方法获取成员变量age的值
6.第24行输出了age和no的值,输出结果:
2013-04-0621:54:56.221 第一个OC程序[1276:303] no is10 and age is28

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马