您的位置:首页 > 编程语言

OC MRC之 @property参数(代码分析)

2015-12-17 12:52 337 查看
第一部分

//
//  main.m
//  04-@property参数
//
//  Created by apple on 13-8-9.
//  Copyright (c) 2013年 itcast. All rights reserved.
//
#import <Foundation/Foundation.h>

@interface Book : NSObject

@end
#import "Book.h"

@implementation Book

@end

#import <Foundation/Foundation.h>
#import "Book.h"

@interface Person : NSObject
@property int age;

// retain : 生成的set方法里面,release旧值,retain新值
@property (retain) Book *book;
@property (retain) NSString *name;

@end

#import "Person.h"

@implementation Person

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

- (void)dealloc
{
[_book release];
[_name release];
[super dealloc];
}

@end

#import <Foundation/Foundation.h>
#import "Book.h"

@interface Student : NSObject

@property (retain) Book *book;

@property (retain) NSString *name;

@end

#import "Student.h"

@implementation Student

- (void)dealloc
{
[_book release];
[_name release];

[super dealloc];
}

@end

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

int main()
{
Book *b = [[Book alloc] init];
Person *p = [[Person alloc] init];

p.book = b;

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

[p release];
[b release];
return 0;
}


第二部分

//
//  main.m
//  05-@property参数
//
//  Created by apple on 13-8-9.
//  Copyright (c) 2013年 itcast. All rights reserved.
//

#import <Foundation/Foundation.h>

/*
1.set方法内存管理相关的参数
* retain : release旧值,retain新值(适用于OC对象类型)
* assign : 直接赋值(默认,适用于非OC对象类型)
* copy   : release旧值,copy新值

2.是否要生成set方法
* readwrite : 同时生成setter和getter的声明、实现(默认)
* readonly  : 只会生成getter的声明、实现

3.多线程管理
* nonatomic : 性能高 (一般就用这个)
* atomic    : 性能低(默认)

4.setter和getter方法的名称
* setter : 决定了set方法的名称,一定要有个冒号 :
* getter : 决定了get方法的名称(一般用在BOOL类型)
*/

@interface Person : NSObject

// 返回BOOL类型的方法名一般以is开头
@property (getter = isRich) BOOL rich;

//
@property (nonatomic, assign, readwrite) int weight;
// setWeight:
// weight

//
@property (readwrite, assign) int height;

@property (nonatomic, assign) int age;

@property (retain) NSString *name;
@end

#import "Person.h"

@implementation Person

@end

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

int main()
{
Person *p = [[Person alloc] init];

p.rich = YES;

BOOL b = p.isRich;

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: