1. //
  2. // main.m
  3. // TestVar2
  4. //
  5. // Created by lishujun on 14-9-4.
  6. // Copyright (c) 2014年 lishujun. All rights reserved.
  7. //
  8.  
  9. #import <Foundation/Foundation.h>
  10.  
  11. @interface Address : NSObject<NSCopying>
  12. -(void) toString;
  13. @end
  14.  
  15. @implementation Address
  16. -(void) toString
  17. {
  18. NSLog(@"this is an address");
  19. }
  20.  
  21. -(id) copyWithZone:(NSZone *)zone
  22. {
  23. Address *newAddress = [[Address alloc]init];
  24. return newAddress;
  25. }
  26. @end
  27.  
  28. @interface Employee : NSObject
  29. @property (copy) Address *address; // assign, retain, copy
  30. @end
  31.  
  32. @implementation Employee
  33. @synthesize address;
  34. @end
  35.  
  36. void testAssignAndRetain()
  37. {
  38. // 创建他们应该都是1
  39. Address *address = [[Address alloc]init];
  40. Address *address2 = [[Address alloc]init];
  41.  
  42. NSLog(@"a1 = %lu", [address retainCount]);
  43. NSLog(@"a2 = %lu", [address2 retainCount]);
  44.  
  45. // 首次赋值看看会不会retain
  46. Employee *employee = [[Employee alloc]init];
  47. [employee setAddress: address];
  48. NSLog(@"a1 = %lu", [address retainCount]);
  49. NSLog(@"a2 = %lu", [address2 retainCount]);
  50.  
  51. // 看看employee.address 和 address还是不是同一个对象
  52. [employee setAddress:address];
  53. NSLog(@"obj address is %@" , address);
  54. NSLog(@"obj employee.address is %@" , employee.address);
  55.  
  56. // 再次赋值看看会不会release
  57. [employee setAddress:address2];
  58. NSLog(@"a1 = %lu", [address retainCount]);
  59. NSLog(@"a2 = %lu", [address2 retainCount]);
  60.  
  61. // 看看使用的时候会不会retain
  62. for (int i=; i<; i++) {
  63. [employee.address toString];
  64. NSLog(@"a2 = %lu", [address2 retainCount]);
  65. }
  66. }
  67.  
  68. void testCopy1()
  69. {
  70. Address *address = [[Address alloc]init];
  71. Address *address2 = [[Address alloc]init];
  72. Employee *employee = [[Employee alloc]init];
  73.  
  74. // 看看employee.address 和 address还是不是同一个对象
  75. [employee setAddress:address];
  76. NSLog(@"%@" , address);
  77. NSLog(@"%@" , address2);
  78. NSLog(@"%@" , employee.address);
  79.  
  80. // 看看employee.address 和 address还是不是同一个对象
  81. [employee setAddress:address2];
  82. NSLog(@"%@" , address);
  83. NSLog(@"%@" , address2);
  84. NSLog(@"%@" , employee.address); //之前的对象被替换
  85. }
  86.  
  87. void testCopy2()
  88. {
  89. Address *address = [[Address alloc]init];
  90. Employee *employee = [[Employee alloc]init];
  91. [employee setAddress:address];
  92.  
  93. // 看看使用对象会不会retain
  94. for (int i=; i<; i++) {
  95. //[employee.address toString];
  96. NSLog(@"address = %lu", [address retainCount]);
  97. NSLog(@"e.address = %lu", [employee.address retainCount]);
  98. }
  99.  
  100. }
  101.  
  102. int main(int argc, const char * argv[])
  103. {
  104.  
  105. @autoreleasepool {
  106. //testAssignAndRetain();
  107. testCopy2();
  108. }
  109. return ;
  110. }

property测试代码:的更多相关文章

  1. iOS开发:XCTest单元测试(附上一个单例的测试代码)

    测试驱动开发并不是一个很新鲜的概念了.在我最开始学习程序编写时,最喜欢干的事情就是编写一段代码,然后运行观察结果是否正确.我所学习第一门语言是c语言,用的最多的是在算法设计上,那时候最常做的事情就是编 ...

  2. 03_MyBatis基本查询,mapper文件的定义,测试代码的编写,resultMap配置返回值,sql片段配置,select标签标签中的内容介绍,配置使用二级缓存,使用别名的数据类型,条件查询ma

     1 PersonTestMapper.xml中的内容如下: <?xmlversion="1.0"encoding="UTF-8"?> < ...

  3. mocha框架下,异步测试代码错误造成的问题----用例超时错误

    今天用抹茶(mocha)做个测试,发现有一个测试项目总是超时: describe("DbFactory functions",function(){ it("query ...

  4. 使用 xunit 编写测试代码

    使用 xunit 编写测试代码 Intro xunit 是 .NET 里使用非常广泛的一个测试框架,有很多测试项目都是在使用 xunit 作为测试框架,不仅仅有很多开源项目在使用,很多微软的项目也在使 ...

  5. .NET单元测试的艺术-3.测试代码

    开篇:上一篇我们学习单元测试和核心技术:存根.模拟对象和隔离框架,它们是我们进行高质量单元测试的技术基础.本篇会集中在管理和组织单元测试的技术,以及如何确保在真实项目中进行高质量的单元测试. 系列目录 ...

  6. mysql锁 实战测试代码

    存储引擎 支持的锁定 MyISAM 表级锁 MEMORY 表级锁 InnoDB 行级锁 BDB 页面锁 表级锁:开销小,加锁快:不会出现死锁:锁定粒度大,发生锁冲突的概率最高,并发度最低.行级锁:开销 ...

  7. 使用Microsoft Fakes隔离测试代码

    在单元测试(Unit Test)中我们遇到的问题之一是:假如被测试组件(类或项目)为A,组件A依赖于组件B,那么在组件A的单元测试ATest中测试A时,也需要依赖于B,在B发生改动后,就可能影响到A的 ...

  8. 在内核中异步请求设备固件firmware的测试代码

    在内核中异步请求设备固件firmware的测试代码 static void ghost_load_firmware_callback(const struct firmware *fw, void * ...

  9. x264测试代码

    建立一个工程,将头文件,库文件加载到工程,测试代码如下:#include <iostream>#include <string>#include "stdint.h& ...

随机推荐

  1. web dynpro message(备忘用)

    DATA lo_api_controller TYPE REF TO if_wd_controller. DATA lo_message_manager TYPE REF TO if_wd_messa ...

  2. 采用subversion管理iOS资源

    1.装和配置subversionserver  在windows server上安装VisualSVN-Server.下载地址http://www.visualsvn.com/server/downl ...

  3. 三分钟学会缓存工具DiskLruCache

    DiskLruCache是一个十分好用的android缓存工具,我们可以从GitHub上下载其源码:https://github.com/JakeWharton/DiskLruCache DiskLr ...

  4. Java基础知识强化之集合框架笔记58:Map集合之LinkedHashMap类的概述

    1. LinkedHashMap类的概述 LinkedHashMap:Map接口的哈希表(保证唯一性) 和 链接(保证有序性)列表实现,具有可预知的迭代顺序. 2. 代码示例: package cn. ...

  5. wordpress密码生成与登录密码验证

    一.研究wordpress时wordpess的密码密码生成与登录密码验证方式很重要 WordPress密码已成为整合的首要目标,如何征服整合,就得了解WordPress密码算法. WordPress系 ...

  6. 在picture library中取某一图片的大图、小图

    public static string GetPicThumbnail(SPFile file, string type) {     string thumbnail = "" ...

  7. 什么是WordPress?

    (今天由于好友 肖知虎的 的需求 , 我开始了帮助小虎建站的需求, 就这样开始学习了Wordpress.  这些文章就是为了记录这些我在学习过程当中的心得,和记录下来的文字而已) 什么是WordPre ...

  8. error: Unable to find vcvarsall.bat while install python library by pip install or python setup.py install.

    Python 2.7 会搜索 Visual Studio 2008. 如果你电脑上没有这个版本的话,比如只有: 1.Visual Studio 2010,在cmd里面执行:SET VS90COMNTO ...

  9. SHELL:Find Memory Usage In Linux (统计每个程序内存使用情况)

    转载一个shell统计linux系统中每个程序的内存使用情况,因为内存结构非常复杂,不一定100%精确,此shell可以在Ghub上下载. [root@db231 ~]# ./memstat.sh P ...

  10. jQuery 效果方法

    jQuery 效果方法 下面的表格列出了所有用于创建动画效果的 jQuery 方法. 方法 描述 animate() 对被选元素应用"自定义"的动画 clearQueue() 对被 ...