Sian 发表于 2014-1-12 11:55:45

第十七讲: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]
查看完整版本: 第十七讲:Objective-C黄金法则之"点语法"