//
// 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. JGit与远程仓库链接使用的两种验证方式(ssh和https)

    JGit是使用JAVA的API来操控Git仓库的库,由Eclipse公司维护.他提供的API分成两个层次,底层命令和高层命令.底层API是直接作用于低级的仓库对象,高层的API是一个面向普通用户级别功 ...

  2. EasyUI-在行内进行表格的增删改操作

    第一篇笔记中记录了如何实现表格的增删改,那个是点击之后跳出来一个对话框然后进行的,这里是在表格本身上进行的操作,也很简单,但是这里发现一个版本问题,也可以说是兼容性问题. 1.首先我们看引用的js和c ...

  3. [Javascript + rxjs] Using the map method with Observable

    Like an array, Observable has a map method that allows us to transform a sequence into a new Observa ...

  4. Java高级--Java线程运行栈信息的获取 getStackTrace()

    我们在Java程序中使用日志功能(JDK Log或者Log4J)的时候,会发现Log系统会自动帮我们打印出丰富的信息,格式一般如下:为了免去解析StackTrace字符串的麻烦,JDK1.4引入了一个 ...

  5. 汇编语言-[BX]和loop指令

    汇编语言-[BX]和loop指令 [BX]指令介绍 mov ax,[bx] 功能: bx为偏移地址,段地址默认为ds.因此,上面指令作用就是将ax中的数据送入内存ds:bx处,即:((ds)*16 + ...

  6. svn出错问题(用户名密码有修改以及资源url改变时)

    用eclipse 同步SVN服务器宛然无法访问了: org.tigris.subversion.javahl.ClientException: RA layer request failed svn: ...

  7. Singleton设计模式 分类: 设计模式 2014-12-03 17:54 59人阅读 评论(0) 收藏

    实现方法: public class SingleTon<T> where T : class, new() {     protected SingleTon() { }     pri ...

  8. 第三部分 关于HHibernate中关键字ID的配置

    实体类映射中,必须配置一个关键字,对应着数据表的关键字,大多数的实体类也都有一个属性表示类的唯一性,在实体类配置文件(.hbm.xml)中,<id>元素的就是这个作用. 一个完整的ID配置 ...

  9. javascript 中状态改变触发事件

    转 有限状态机:是一个非常有用的模型,可以模拟世界上大部分事物. 它有三个特征: * 状态总数(state)是有限的. * 任一时刻,只处在一种状态之中. * 某种条件下,会从一种状态转变(trans ...

  10. 一道JS addEventListener面试题

    在园里看到一道面试题,<div id="test">Click Here</div> var node=document.getElementById('t ...