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

第一部分

  1 //
  2 //  main.m
  3 //  04-@property参数
  4 //
  5 //  Created by apple on 13-8-9.
  6 //  Copyright (c) 2013年 itcast. All rights reserved.
  7 //
  8 #import <Foundation/Foundation.h>
  9 
 10 @interface Book : NSObject
 11 
 12 @end
 13 #import "Book.h"
 14 
 15 @implementation Book
 16 
 17 @end
 18 
 19 
 20 #import <Foundation/Foundation.h>
 21 #import "Book.h"
 22 
 23 @interface Person : NSObject
 24 @property int age;
 25 
 26 // retain : 生成的set方法里面,release旧值,retain新值
 27 @property (retain) Book *book;
 28 @property (retain) NSString *name;
 29 
 30 @end
 31 
 32 #import "Person.h"
 33 
 34 @implementation Person
 35 
 36 //- (void)setBook:(Book *)book
 37 //{
 38 //    if (_book != book)
 39 //    {
 40 //        [_book release];
 41 //
 42 //        _book = [book retain];
 43 //    }
 44 //}
 45 
 46 - (void)dealloc
 47 {
 48     [_book release];
 49     [_name release];
 50     [super dealloc];
 51 }
 52 
 53 @end
 54 
 55 
 56 
 57 
 58 #import <Foundation/Foundation.h>
 59 #import "Book.h"
 60 
 61 @interface Student : NSObject
 62 
 63 @property (retain) Book *book;
 64 
 65 @property (retain) NSString *name;
 66 
 67 @end
 68 
 69 
 70 #import "Student.h"
 71 
 72 @implementation Student
 73 
 74 
 75 - (void)dealloc
 76 {
 77     [_book release];
 78     [_name release];
 79     
 80     [super dealloc];
 81 }
 82 
 83 @end
 84 
 85 
 86 #import <Foundation/Foundation.h>
 87 #import "Person.h"
 88 #import "Book.h"
 89 
 90 int main()
 91 {
 92     Book *b = [[Book alloc] init];
 93     Person *p = [[Person alloc] init];
 94     
 95     p.book = b;
 96     
 97     
 98     NSLog(@"%ld", [b retainCount]);
 99     
100     
101     [p release];
102     [b release];
103     return 0;
104 }

第二部分

 1 //
 2 //  main.m
 3 //  05-@property参数
 4 //
 5 //  Created by apple on 13-8-9.
 6 //  Copyright (c) 2013年 itcast. All rights reserved.
 7 //
 8 
 9 #import <Foundation/Foundation.h>
10 
11 /*
12  1.set方法内存管理相关的参数
13  * retain : release旧值,retain新值(适用于OC对象类型)
14  * assign : 直接赋值(默认,适用于非OC对象类型)
15  * copy   : release旧值,copy新值
16  
17  2.是否要生成set方法
18  * readwrite : 同时生成setter和getter的声明、实现(默认)
19  * readonly  : 只会生成getter的声明、实现
20  
21  3.多线程管理
22  * nonatomic : 性能高 (一般就用这个)
23  * atomic    : 性能低(默认)
24  
25  4.setter和getter方法的名称
26  * setter : 决定了set方法的名称,一定要有个冒号 :
27  * getter : 决定了get方法的名称(一般用在BOOL类型)
28  */
29 
30 @interface Person : NSObject
31 
32 
33 // 返回BOOL类型的方法名一般以is开头
34 @property (getter = isRich) BOOL rich;
35 
36 //
37 @property (nonatomic, assign, readwrite) int weight;
38 // setWeight:
39 // weight
40 
41 //
42 @property (readwrite, assign) int height;
43 
44 @property (nonatomic, assign) int age;
45 
46 @property (retain) NSString *name;
47 @end
48 
49 #import "Person.h"
50 
51 @implementation Person
52 
53 @end
54 
55 
56 
57 
58 
59 #import <Foundation/Foundation.h>
60 #import "Person.h"
61 
62 int main()
63 {
64     Person *p = [[Person alloc] init];
65     
66     
67     p.rich = YES;
68     
69     BOOL b = p.isRich;
70     
71     return 0;
72 }
原文地址:https://www.cnblogs.com/oc-bowen/p/5053729.html