年年有"余"

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2765|回复: 0

第十七讲:Objective-C黄金法则之"点语法"

[复制链接]
  • TA的每日心情
    奋斗
    2022-12-13 21:26
  • 签到天数: 371 天

    [LV.9]以坛为家II

    发表于 2014-1-12 11:55:45 | 显示全部楼层 |阅读模式
    本帖最后由 Sian 于 2014-1-12 11:58 编辑

    本讲是针对第十六讲黄金法则中retain与release关系的优化,却retain属性:@property (retain)
    Dog.h
    1. //
    2. //  Dog.h
    3. //  Memory_retain
    4. //
    5. //  Created by yusian on 14-1-12.
    6. //  Copyright (c) 2014年 yusian. All rights reserved.
    7. //
    8. #import <Foundation/Foundation.h>
    9. @interface Dog : NSObject
    10. {
    11.     int _ID;
    12. }
    13. @property int ID;
    14. @end
    复制代码
    Dog.m
    1. //
    2. //  Dog.m
    3. //  Memory_retain
    4. //
    5. //  Created by yusian on 14-1-12.
    6. //  Copyright (c) 2014年 yusian. All rights reserved.
    7. //
    8. #import "Dog.h"
    9. @implementation Dog
    10. @synthesize ID = _ID;
    11. - (void) dealloc{
    12.     NSLog(@"dog %d is dealloc",_ID);
    13.     [super dealloc];
    14. }
    15. @end
    复制代码
    Person.h
    1. //
    2. //  Person.h
    3. //  Memory_retain
    4. //
    5. //  Created by yusian on 14-1-12.
    6. //  Copyright (c) 2014年 yusian. All rights reserved.
    7. //
    8. #import <Foundation/Foundation.h>
    9. #import "Dog.h"
    10. @interface Person : NSObject
    11. @property (retain) Dog * dog;
    12. @end
    复制代码
    Person.m
    1. //
    2. //  Person.m
    3. //  Memory_retain
    4. //
    5. //  Created by yusian on 14-1-12.
    6. //  Copyright (c) 2014年 yusian. All rights reserved.
    7. //
    8. #import "Person.h"
    9. @implementation Person
    10. @synthesize  dog = _dog;
    11. - (void) dealloc{
    12.     self.dog = nil;
    13.     NSLog(@"Person is dealloc");
    14.     [super dealloc];
    15. }
    16. @end
    复制代码
    main.m
    1. //
    2. //  main.m
    3. //  Memory_retain
    4. //
    5. //  Created by yusian on 14-1-12.
    6. //  Copyright (c) 2014年 yusian. All rights reserved.
    7. //
    8. #import <Foundation/Foundation.h>
    9. #import "Dog.h"
    10. #import "Person.h"
    11. int main(int argc, const char * argv[])
    12. {
    13.     @autoreleasepool {
    14.         
    15.         Dog * dog1 = [[Dog alloc] init];
    16.         Dog * dog2 = [[Dog alloc] init];
    17.         Person * sim = [[Person alloc] init];
    18.         Person * sian = [[Person alloc] init];
    19.         
    20.         [dog1 setID:1];
    21.         [dog2 setID:2];
    22.         NSLog(@"//初始化后的retainCount值");
    23.         NSLog(@"dog %d retainCount1 is %ld",[dog1 ID],[dog1 retainCount]);
    24.         NSLog(@"dog %d retainCount1 is %ld",[dog2 ID],[dog2 retainCount]);
    25.         
    26.         [sim setDog:dog1];
    27.         NSLog(@"//sim开始遛狗dog1");
    28.         NSLog(@"dog %d retainCount2 is %ld",[dog1 ID],[dog1 retainCount]);
    29.         NSLog(@"dog %d retainCount2 is %ld",[dog2 ID],[dog2 retainCount]);
    30.         [sian setDog:dog2];
    31.         NSLog(@"//sian开始遛狗dog2");
    32.         NSLog(@"dog %d retainCount3 is %ld",[dog1 ID],[dog1 retainCount]);
    33.         NSLog(@"dog %d retainCount3 is %ld",[dog2 ID],[dog2 retainCount]);
    34.         
    35.         [sim setDog:dog2];
    36.         [sian setDog:dog1];
    37.         NSLog(@"//sim和sian交换遛狗");
    38.         NSLog(@"dog %d retainCount4 is %ld",[dog1 ID],[dog1 retainCount]);
    39.         NSLog(@"dog %d retainCount4 is %ld",[dog2 ID],[dog2 retainCount]);
    40.         
    41.         [sim setDog:dog1];
    42.         NSLog(@"//sim和sian都转为遛狗dog1");
    43.         NSLog(@"dog %d retainCount5 is %ld",[dog1 ID],[dog1 retainCount]);
    44.         NSLog(@"dog %d retainCount5 is %ld",[dog2 ID],[dog2 retainCount]);
    45.         
    46.         [sim setDog:dog2];
    47.         [sian setDog:dog2];
    48.         NSLog(@"//sim和sian都转为遛狗dog2");
    49.         NSLog(@"dog %d retainCount6 is %ld",[dog1 ID],[dog1 retainCount]);
    50.         NSLog(@"dog %d retainCount6 is %ld",[dog2 ID],[dog2 retainCount]);
    51.         
    52.         NSLog(@"//sim离开");
    53.         [sim release];
    54.         NSLog(@"dog %d retainCount7 is %ld",[dog1 ID],[dog1 retainCount]);
    55.         NSLog(@"dog %d retainCount7 is %ld",[dog2 ID],[dog2 retainCount]);
    56.         
    57.         NSLog(@"//sian离开");
    58.         [sian release];
    59.         NSLog(@"dog %d retainCount8 is %ld",[dog1 ID],[dog1 retainCount]);
    60.         NSLog(@"dog %d retainCount8 is %ld",[dog2 ID],[dog2 retainCount]);
    61.         
    62.         NSLog(@"//dog1 and dog2 release");
    63.         [dog1 release];
    64.         [dog2 release];
    65.         
    66.     }
    67.     return 0;
    68. }
    复制代码
    输出结果为:
    1. 2014-01-12 11:50:01.862 Memory_retain[1767:303] //初始化后的retainCount值
    2. 2014-01-12 11:50:01.864 Memory_retain[1767:303] dog 1 retainCount1 is 1
    3. 2014-01-12 11:50:01.864 Memory_retain[1767:303] dog 2 retainCount1 is 1
    4. 2014-01-12 11:50:01.865 Memory_retain[1767:303] //sim开始遛狗dog1
    5. 2014-01-12 11:50:01.865 Memory_retain[1767:303] dog 1 retainCount2 is 2
    6. 2014-01-12 11:50:01.865 Memory_retain[1767:303] dog 2 retainCount2 is 1
    7. 2014-01-12 11:50:01.866 Memory_retain[1767:303] //sian开始遛狗dog2
    8. 2014-01-12 11:50:01.866 Memory_retain[1767:303] dog 1 retainCount3 is 2
    9. 2014-01-12 11:50:01.867 Memory_retain[1767:303] dog 2 retainCount3 is 2
    10. 2014-01-12 11:50:01.867 Memory_retain[1767:303] //sim和sian交换遛狗
    11. 2014-01-12 11:50:01.867 Memory_retain[1767:303] dog 1 retainCount4 is 2
    12. 2014-01-12 11:50:01.868 Memory_retain[1767:303] dog 2 retainCount4 is 2
    13. 2014-01-12 11:50:01.868 Memory_retain[1767:303] //sim和sian都转为遛狗dog1
    14. 2014-01-12 11:50:01.868 Memory_retain[1767:303] dog 1 retainCount5 is 3
    15. 2014-01-12 11:50:01.868 Memory_retain[1767:303] dog 2 retainCount5 is 1
    16. 2014-01-12 11:50:01.869 Memory_retain[1767:303] //sim和sian都转为遛狗dog2
    17. 2014-01-12 11:50:01.869 Memory_retain[1767:303] dog 1 retainCount6 is 1
    18. 2014-01-12 11:50:01.879 Memory_retain[1767:303] dog 2 retainCount6 is 3
    19. 2014-01-12 11:50:01.879 Memory_retain[1767:303] //sim离开
    20. 2014-01-12 11:50:01.880 Memory_retain[1767:303] Person is dealloc
    21. 2014-01-12 11:50:01.880 Memory_retain[1767:303] dog 1 retainCount7 is 1
    22. 2014-01-12 11:50:01.880 Memory_retain[1767:303] dog 2 retainCount7 is 2
    23. 2014-01-12 11:50:01.881 Memory_retain[1767:303] //sian离开
    24. 2014-01-12 11:50:01.881 Memory_retain[1767:303] Person is dealloc
    25. 2014-01-12 11:50:01.881 Memory_retain[1767:303] dog 1 retainCount8 is 1
    26. 2014-01-12 11:50:01.882 Memory_retain[1767:303] dog 2 retainCount8 is 1
    27. 2014-01-12 11:50:01.882 Memory_retain[1767:303] //dog1 and dog2 release
    28. 2014-01-12 11:50:01.883 Memory_retain[1767:303] dog 1 is dealloc
    29. 2014-01-12 11:50:01.883 Memory_retain[1767:303] dog 2 is dealloc
    30. Program ended with exit code: 0
    复制代码



    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    手机版|小黑屋|Archiver|iOS开发笔记 ( 湘ICP备14010846号 )

    GMT+8, 2024-5-6 03:53 , Processed in 0.042730 second(s), 18 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表