您的位置:首页 > 移动开发 > Objective-C

Objective-C内存管理第三弹:@property的使用

2015-12-13 21:42 489 查看
//main.m

#import <Foundation/Foundation.h>
#import "Person.h"
#import "Room.h"

int main(int argc, const char * argv[]) {

Person * p = [[Person alloc] init];
Room * r = [[Room alloc] init];

[p setSex:YES];

BOOL sex = p.isMan;

NSLog(@"%d", sex);

p.room = r;

[r release];

p.room = r;

Room * r2 = [[Room alloc] init];

p.room = r2;

[r2 release];
r2 = nil;

[p release];
p = nil;

return 0;
}


//Person.h

/*

内存管理关键字:
retain 就在setter和getter方法中加入一些内存管理的代码
当属性为一个普通的OC对象的时候,使用retain

assign 直接赋值,不生成内存管理代码
当属性为基本数据类型的时候,使用assign

copy复制对象,NSString对象一般使用copy

线程安全的关键字:
nonatomic:非原子性,不会生成线程安全的代码,速度快,iOS通常都是这种。

atomic:原子性,会生成线程安全的代码

控制权限:
readwrite:可读可写,生成getter与setter方法是声明与实现

readonly:只读,只生成getter方法

修改方法名称:
getter 修改生成的getter方法的名称
一般情况下,BOOL类型的属性的getter方法是以is开头的。
setter 修改生成的setter方法的名称
一般不去修改它
*/

@interface Person : NSObject

@property (nonatomic, assign, getter=isMan,setter=setSex:) BOOL man;

@property (nonatomic, copy) NSString * name;

@property (nonatomic, assign) int age;

@property (nonatomic, retain) Room * room;

@end


//Person.m

#import "Person.h"

@implementation Person

- (void)dealloc
{
//    [_room release];
//    _room = nil;

//简写:setter方法中先release再retain
self.room = nil;

NSLog(@"%s",__func__);
[super dealloc];
}

@end


//Room.h

#import <Foundation/Foundation.h>

@interface Room : NSObject

@end


//Room.m

#import "Room.h"

@implementation Room

- (void)dealloc
{
NSLog(@"%s",__func__);
[super dealloc];
}
@end
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: