//
// main.m
// TestVar2
//
// Created by lishujun on 14-9-4.
// Copyright (c) 2014年 lishujun. All rights reserved.
// #import <Foundation/Foundation.h> @interface Address : NSObject<NSCopying>
-(void) toString;
@end @implementation Address
-(void) toString
{
NSLog(@"this is an address");
} -(id) copyWithZone:(NSZone *)zone
{
Address *newAddress = [[Address alloc]init];
return newAddress;
}
@end @interface Employee : NSObject
@property (copy) Address *address; // assign, retain, copy
@end @implementation Employee
@synthesize address;
@end void testAssignAndRetain()
{
// 创建他们应该都是1
Address *address = [[Address alloc]init];
Address *address2 = [[Address alloc]init]; NSLog(@"a1 = %lu", [address retainCount]);
NSLog(@"a2 = %lu", [address2 retainCount]); // 首次赋值看看会不会retain
Employee *employee = [[Employee alloc]init];
[employee setAddress: address];
NSLog(@"a1 = %lu", [address retainCount]);
NSLog(@"a2 = %lu", [address2 retainCount]); // 看看employee.address 和 address还是不是同一个对象
[employee setAddress:address];
NSLog(@"obj address is %@" , address);
NSLog(@"obj employee.address is %@" , employee.address); // 再次赋值看看会不会release
[employee setAddress:address2];
NSLog(@"a1 = %lu", [address retainCount]);
NSLog(@"a2 = %lu", [address2 retainCount]); // 看看使用的时候会不会retain
for (int i=; i<; i++) {
[employee.address toString];
NSLog(@"a2 = %lu", [address2 retainCount]);
}
} void testCopy1()
{
Address *address = [[Address alloc]init];
Address *address2 = [[Address alloc]init];
Employee *employee = [[Employee alloc]init]; // 看看employee.address 和 address还是不是同一个对象
[employee setAddress:address];
NSLog(@"%@" , address);
NSLog(@"%@" , address2);
NSLog(@"%@" , employee.address); // 看看employee.address 和 address还是不是同一个对象
[employee setAddress:address2];
NSLog(@"%@" , address);
NSLog(@"%@" , address2);
NSLog(@"%@" , employee.address); //之前的对象被替换
} void testCopy2()
{
Address *address = [[Address alloc]init];
Employee *employee = [[Employee alloc]init];
[employee setAddress:address]; // 看看使用对象会不会retain
for (int i=; i<; i++) {
//[employee.address toString];
NSLog(@"address = %lu", [address retainCount]);
NSLog(@"e.address = %lu", [employee.address retainCount]);
} } int main(int argc, const char * argv[])
{ @autoreleasepool {
//testAssignAndRetain();
testCopy2();
}
return ;
}

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. 【转】android错误 aapt.exe已停止工作的解决方法

    http://www.jb51.net/article/57420.htm 在使用eclipse进行安卓java的编程的时候,有时候我们会遇到这样的问题:那就是无故弹出aapt.exe停止工作的提示, ...

  2. JSON和JAVA的POJO的相互转换【转载】

    该类中用用到的jar包:参加文章<使用json-lib进行Java和JSON之间的转换[转载]> import java.util.Collection; import java.util ...

  3. Java经典封装JDBC模板(充分体现面向对象思想)(转)

    程序清单一览 bean类 package com.software.usermanager.bean; public class Users { private String id; private ...

  4. oracle8

    数据库管理 -- 管理表空间和数据文件 表空间是数据库的逻辑组成部分.从物理上讲,数据库数据存放在数据文件中:从逻辑上讲,数据库则是存放在表空间中,数据管理是以表空间管理的,表空间由一个或多个数据文件 ...

  5. 字符集详解 ------------------------ UNICODE +UTF8

    http://my.oschina.net/goldenshaw/blog?catalog=3294521 http://my.oschina.net/goldenshaw/blog?catalog= ...

  6. 在String中添加移动构造函数和移动赋值运算符

    13.50 没有定义析构函数 #include<iostream> #include<string> #include<memory> #include<ut ...

  7. VC printf输出彩色字体

    在VC下使用SetConsoleTextAttribute()函数可以改变当前控制台的前景色和背景色,从而达到输出彩色字体的效果. 使用的方法也很简单,具体代码如下: #include <win ...

  8. Obj2002java

    计算球体积 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  9. 重新温习,不但可以让自己对js更加的深刻认识,又能加深记忆,至此每天一次复习记录在此。

    Undefined类型,它只有一个值就是它本身,打个比方你在声明变量的时候又未对变量赋值也就是相关初始化操作,那么此刻该变量的值便是Undefined. var a//声明一个变量. console. ...

  10. scp文件到远端机器问题总结及解决方法

    今天在download服务器日志时遇到了很多问题, 顺便把相应的解决步骤记录下方便以后查看. #把文件copy到192.168.1.102的服务器上 scp -r local_dir readonly ...