第十七讲:Objective-C黄金法则之"点语法"
本帖最后由 Sian 于 2014-1-12 11:58 编辑本讲是针对第十六讲黄金法则中retain与release关系的优化,却retain属性:@property (retain)
Dog.h//
//Dog.h
//Memory_retain
//
//Created by yusian on 14-1-12.
//Copyright (c) 2014年 yusian. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface Dog : NSObject
{
int _ID;
}
@property int ID;
@end
Dog.m
//
//Dog.m
//Memory_retain
//
//Created by yusian on 14-1-12.
//Copyright (c) 2014年 yusian. All rights reserved.
//
#import "Dog.h"
@implementation Dog
@synthesize ID = _ID;
- (void) dealloc{
NSLog(@"dog %d is dealloc",_ID);
;
}
@endPerson.h
//
//Person.h
//Memory_retain
//
//Created by yusian on 14-1-12.
//Copyright (c) 2014年 yusian. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Dog.h"
@interface Person : NSObject
@property (retain) Dog * dog;
@end
Person.m
//
//Person.m
//Memory_retain
//
//Created by yusian on 14-1-12.
//Copyright (c) 2014年 yusian. All rights reserved.
//
#import "Person.h"
@implementation Person
@synthesizedog = _dog;
- (void) dealloc{
self.dog = nil;
NSLog(@"Person is dealloc");
;
}
@end
main.m
//
//main.m
//Memory_retain
//
//Created by yusian on 14-1-12.
//Copyright (c) 2014年 yusian. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Dog.h"
#import "Person.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
Dog * dog1 = [ init];
Dog * dog2 = [ init];
Person * sim = [ init];
Person * sian = [ init];
;
;
NSLog(@"//初始化后的retainCount值");
NSLog(@"dog %d retainCount1 is %ld",,);
NSLog(@"dog %d retainCount1 is %ld",,);
;
NSLog(@"//sim开始遛狗dog1");
NSLog(@"dog %d retainCount2 is %ld",,);
NSLog(@"dog %d retainCount2 is %ld",,);
;
NSLog(@"//sian开始遛狗dog2");
NSLog(@"dog %d retainCount3 is %ld",,);
NSLog(@"dog %d retainCount3 is %ld",,);
;
;
NSLog(@"//sim和sian交换遛狗");
NSLog(@"dog %d retainCount4 is %ld",,);
NSLog(@"dog %d retainCount4 is %ld",,);
;
NSLog(@"//sim和sian都转为遛狗dog1");
NSLog(@"dog %d retainCount5 is %ld",,);
NSLog(@"dog %d retainCount5 is %ld",,);
;
;
NSLog(@"//sim和sian都转为遛狗dog2");
NSLog(@"dog %d retainCount6 is %ld",,);
NSLog(@"dog %d retainCount6 is %ld",,);
NSLog(@"//sim离开");
;
NSLog(@"dog %d retainCount7 is %ld",,);
NSLog(@"dog %d retainCount7 is %ld",,);
NSLog(@"//sian离开");
;
NSLog(@"dog %d retainCount8 is %ld",,);
NSLog(@"dog %d retainCount8 is %ld",,);
NSLog(@"//dog1 and dog2 release");
;
;
}
return 0;
}
输出结果为:
2014-01-12 11:50:01.862 Memory_retain //初始化后的retainCount值
2014-01-12 11:50:01.864 Memory_retain dog 1 retainCount1 is 1
2014-01-12 11:50:01.864 Memory_retain dog 2 retainCount1 is 1
2014-01-12 11:50:01.865 Memory_retain //sim开始遛狗dog1
2014-01-12 11:50:01.865 Memory_retain dog 1 retainCount2 is 2
2014-01-12 11:50:01.865 Memory_retain dog 2 retainCount2 is 1
2014-01-12 11:50:01.866 Memory_retain //sian开始遛狗dog2
2014-01-12 11:50:01.866 Memory_retain dog 1 retainCount3 is 2
2014-01-12 11:50:01.867 Memory_retain dog 2 retainCount3 is 2
2014-01-12 11:50:01.867 Memory_retain //sim和sian交换遛狗
2014-01-12 11:50:01.867 Memory_retain dog 1 retainCount4 is 2
2014-01-12 11:50:01.868 Memory_retain dog 2 retainCount4 is 2
2014-01-12 11:50:01.868 Memory_retain //sim和sian都转为遛狗dog1
2014-01-12 11:50:01.868 Memory_retain dog 1 retainCount5 is 3
2014-01-12 11:50:01.868 Memory_retain dog 2 retainCount5 is 1
2014-01-12 11:50:01.869 Memory_retain //sim和sian都转为遛狗dog2
2014-01-12 11:50:01.869 Memory_retain dog 1 retainCount6 is 1
2014-01-12 11:50:01.879 Memory_retain dog 2 retainCount6 is 3
2014-01-12 11:50:01.879 Memory_retain //sim离开
2014-01-12 11:50:01.880 Memory_retain Person is dealloc
2014-01-12 11:50:01.880 Memory_retain dog 1 retainCount7 is 1
2014-01-12 11:50:01.880 Memory_retain dog 2 retainCount7 is 2
2014-01-12 11:50:01.881 Memory_retain //sian离开
2014-01-12 11:50:01.881 Memory_retain Person is dealloc
2014-01-12 11:50:01.881 Memory_retain dog 1 retainCount8 is 1
2014-01-12 11:50:01.882 Memory_retain dog 2 retainCount8 is 1
2014-01-12 11:50:01.882 Memory_retain //dog1 and dog2 release
2014-01-12 11:50:01.883 Memory_retain dog 1 is dealloc
2014-01-12 11:50:01.883 Memory_retain dog 2 is dealloc
Program ended with exit code: 0
页:
[1]