- property实例
- property参数
- 自动释放池
一、property实例
1.前边的例子我们看到,我们在一个类中如果用到另外一个类的实例作为自己的成员变量时,通常需要在setter方法中,先release一下之前的,再retain一下新的。
这里我们只是有一个Book,如果我们再增加比如课程、老师等等可能包含很多,我们是否需要都这样来写呢?我们看的出来,非常麻烦。不用担心,Xcode给我们提供了特别方便的方法,就是给property传参数即可。
Student的声明方法
// // Student.h // Property的内存管理 // // Created by apple on 14-3-26. // Copyright (c) 2014年 apple. All rights reserved. // #import <Foundation/Foundation.h> @class Book; @interface Student : NSObject @property int age; @property (nonatomic, retain) Book *book; @end
Student的实现方法
// // Student.m // Property的内存管理 // // Created by apple on 14-3-26. // Copyright (c) 2014年 apple. All rights reserved. // #import "Student.h" #import "Book.h" @implementation Student -(void)dealloc { [_book release]; [super dealloc]; } @end
我们只需要叫再dealloc中记得release即可,是否方便很多?
2.究竟可以传哪些参数呢?
1⃣️管理内存的参数
retain:把你的set方法中的内存管理帮你生成了。当参数是对象的时候都需要写上
assign:默认情况下,比如我们的int前边默认写的就是assign
copy:?问好表示占位符,我们以后具体讲
2⃣️读写的参数
readonly:只读,也就是只有getter方法
readwrite:读写,默认。也就是getter和setter方法都有
3⃣️线程安全
atomic:默认,在读写的时候加锁,保证线程的安全。(必然影响效率)
nonatomic:代表方法不需要考虑线程安全的问题。(我们通常在编程中使用nonatomic)
三、自动释放池
概念:将对象加入自动释放池,当自动释放池被释放的时候,加入里面的所有对象,都release一次
用法:对象调用autorelease即可将对象加入最近的自动释放池
例子:写一个快速建立对象的方法
//声明 +(id)student;
//实现 +(id)student { return [[[Student alloc] init] autorelease]; }
//调用 Student *stu = [Student student];