黑马程序员——set方法内存管理(@property内存管理)

来源:互联网 发布:mac foxmail 导入邮件 编辑:程序博客网 时间:2024/06/06 06:29

---------------------- iOS开发、iOS培训、期待与您交流! ----------------------

1set方法内存管理——@property内存管理

利用@property:自动生成内存管理

BookPerson

Person.h

@property (retain) Book * book;

person.m

- (void)dealloc

{

[_book release];

[super dealloc];

}

main

int main()

{

Book *b = [[Book alloc] init];

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

p.book = b;

NSLog(@"%ld",[b retainCount]);

[p release];

[p release];

return 0;

}

1.set方法内存相关的参数

retain release 旧值,retain新值(适合于OC对象类型)

assign: 直接赋值(默认,适合于非OC对象)

Copy release 旧值,copy新值

2.是否要生成set方法

readwrite :同时生成settergetter的声明、实现(默认)

Readonly :只会生成getter方法的声明、实现

3.多线程管理

nonatomic :性能高

atomic :性能低

4.settergetter 方法的名称

setter :决定了set方法的名称,一定要有个冒号

getter :  决定了get方法的名称(一般用有BOOL类型)

@property (nonatomic,assign,readwrite) int weight;

@property (readwrite,assign) int height;

@property (nonatomic,assign) int age;

@property (retain) NSString *name;

 

@property (getter = isRich) BOOL rich;

p.rich = YES;

BOOL b = p.rich;

 

 

2、循环retain@class:相互引用 

Person Card

Person.h

#import <Foundation/Foundation.h>

@class Card;// 仅仅告诉编译器,card是个类

@interface Person :NSObject

@property (nonatomic,assign) Card *card;// 这里用assign,是为了防止无限引用

@end

 

Person.m

#import "Person.h"

#import "Card.h"

@implementation Person

- (void)dealloc

{

NSLog(@"Person对象被回收");

[super dealloc];

}

@end

 

Card.h

#import <Foundation/Foundation.h>

@class Person

@interface Card :NSObject

@property (nonatomic,retain) Person *person;// 上面已经写了assign,这里写retain,所以后面_person release一下

@end

 

Card.m

#import "Person.h"

#import "Card.h"

@implementation Card

- (void)dealloc

{

NSLog(@"Card对象被回收");

[_person release];

[super dealloc];

}

@end

main

int main()

{

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

Card *c = [[Card alloc] init];

p.card =c;

c.person=p;

[c release];

[p release];

return 0;

}

 


0 0
原创粉丝点击