標籤:
.h聲明檔案
1 // Integer.h 2 // 02-MRC 3 // 4 // Created by ma c on 15/8/13. 5 // Copyright (c) 2015年 bjsxt. All rights reserved. 6 // 7 8 #import <Foundation/Foundation.h> 9 10 @interface Integer : NSObject11 @property(nonatomic,assign)NSInteger i;12 -(id)initWithI:(NSInteger) i;13 -(void) print;14 +(Integer *)integerWithIntger:(NSInteger) i;15 @end
.m實現檔案
1 // Integer.m 2 // 02-MRC 3 // 4 // Created by ma c on 15/8/13. 5 // Copyright (c) 2015年 bjsxt. All rights reserved. 6 // 7 8 #import "Integer.h" 9 10 @implementation Integer11 -(id)initWithI:(NSInteger) i12 {13 self = [super init];14 if(self)15 {16 _i = i;17 }18 return self;19 }20 +(Integer *)integerWithIntger:(NSInteger) i21 {22 return [[Integer alloc]initWithI:i];23 }24 25 -(void) print26 {27 NSLog(@"i = %ld",_i);28 }29 -(void)dealloc30 {31 NSLog(@"integer dealloc");32 [super dealloc];33 }34 @end
主函數測試
1 // main.m 2 // 02-MRC 3 // 4 // Created by ma c on 15/8/13. 5 // Copyright (c) 2015年 bjsxt. All rights reserved. 6 // 7 8 #import <Foundation/Foundation.h> 9 #import "Integer.h"10 int main(int argc, const char * argv[])11 {12 @autoreleasepool13 {14 //測試手動引用計數15 //1.建立對象會獲得對象所有權16 Integer *i1 = [[Integer alloc]initWithI:10];17 NSLog(@"retaincount = %lu",[i1 retainCount]);//118 19 20 //2.只通過指標賦值,不會獲得對象所有權21 Integer *i2 = i1;22 NSLog(@"retaincount = %lu",[i2 retainCount]);//123 24 25 //3.通過retain會獲得對象的所有權26 [i1 retain];27 NSLog(@"retaincount = %lu",[i1 retainCount]);//228 29 30 //4.將對象添加到容器中,容器中會儲存物件的一個引用,會獲得對象所有權31 NSMutableArray *array = [NSMutableArray array];32 [array addObject:i1];33 NSLog(@"retaincount = %lu",[i1 retainCount]);//334 35 36 //5.通過release釋放對象的所有權37 [i1 release];38 NSLog(@"retaincount = %lu",[i1 retainCount]);//239 40 41 //6.從容器中刪除對象,也會釋放對象所有權42 [array removeObject:i1];43 NSLog(@"retaincount = %lu",[i1 retainCount]);//144 45 //7.最後再釋放一次,對象才會被正常銷毀46 [i1 release]; //此時,底層會調用dealloc方法 //047 }48 return 0;49 }
測試結果是:
2015-08-13 17:32:36.408 02-MRC[1599:103515] retaincount = 12015-08-13 17:32:36.409 02-MRC[1599:103515] retaincount = 12015-08-13 17:32:36.410 02-MRC[1599:103515] retaincount = 22015-08-13 17:32:36.410 02-MRC[1599:103515] retaincount = 32015-08-13 17:32:36.410 02-MRC[1599:103515] retaincount = 22015-08-13 17:32:36.410 02-MRC[1599:103515] retaincount = 12015-08-13 17:32:36.410 02-MRC[1599:103515] integer deallocProgram ended with exit code: 0
Objective-C:MRC(引用計數器)獲得對象所有權的方式(init、retain、copy等)