Objective - C基础: 第五天 - 4.@property - 内存管理

来源:互联网 发布:怎么健身 知乎 编辑:程序博客网 时间:2024/05/01 16:11

在前面, 我们基本上讲完了OC的内存管理, 但如果按照我们之前那样子做, 我们需要写非常非常多的代码, 在我们实际开发中, 不可能就只有那么一两个对象, 所以我们需要写的set方法和get方法就一大堆, 比如下面这个例子:

#import <Foundation/Foundation.h>#import "Book.h"@interface Person : NSObject{    int _age;    Book *_book;}- (void)setAge:(int)age;- (int)age;- (void)setBook:(Book *)book;- (Book *)book;@end@implementation Person- (void)setAge:(int)age{    _age = age;}- (int)age{    return _age;}- (void)setBook:(Book *)book{    if (_book != book)    {        [_book release];        _book = [book retain];    }}- (Book *)book{    return _book;}- (void)dealloc{    [_book release];    [super dealloc];}@end


#import <Foundation/Foundation.h>@interface Book : NSObject@end@implementation Book@end

#import <Foundation/Foundation.h>#import "Person.h"#import "Book.h"int main(int argc, const char * argv[]){    Person *p = [[Person alloc]init];        Book *b = [[Book alloc]init];        p.book = b;        NSLog(@"%ld", [b retainCount]);        [b release];    [p release];        return 0;}

没错, 按照上面的例子, 我们是可以进行正常的内存管理, 但这样子写, 会累死人, 因为一旦创建一个对象就要写一次set, get方法, 而且这些代码都是非常的垃圾, 非常的恶心, 一旦对象多了, 那么整个项目就乱七八糟, 几乎都是set和get方法, 为了解决这个问题, 其实可以运用@property, 比如:


#import <Foundation/Foundation.h>#import "Book.h"@interface Person : NSObject@property int age;@property (retain) Book *book;@end

只要在@property后加上一个小括号并且写上retain, 那么就可以自动生成这一堆代码:

- (void)setBook:(Book *)book{    if (_book != book)    {        [_book release];        _book = [book retain];    }}- (Book *)book{    return _book;}



有了@property(retain)之后, 从此我们写代码就非常的舒服了, 不用再去写什么set, get方法了~~当然@property并不是万能的, dealloc方法还是需要我们自己去写~~如果不想写dealloc, apple官方也有提供一个方法, 那么就是ARC机制啦, 这个我们后面会讲到~~





当然, 在@property()的小括号里面, 不只是写retain, 还可以在里面写很多参数, 这个我们后面慢慢详解~~~








好了, 这次我们讲到这里, 下次我们继续~~~

0 0
原创粉丝点击