property测试代码:
//
// 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测试代码:的更多相关文章
- iOS开发:XCTest单元测试(附上一个单例的测试代码)
测试驱动开发并不是一个很新鲜的概念了.在我最开始学习程序编写时,最喜欢干的事情就是编写一段代码,然后运行观察结果是否正确.我所学习第一门语言是c语言,用的最多的是在算法设计上,那时候最常做的事情就是编 ...
- 03_MyBatis基本查询,mapper文件的定义,测试代码的编写,resultMap配置返回值,sql片段配置,select标签标签中的内容介绍,配置使用二级缓存,使用别名的数据类型,条件查询ma
1 PersonTestMapper.xml中的内容如下: <?xmlversion="1.0"encoding="UTF-8"?> < ...
- mocha框架下,异步测试代码错误造成的问题----用例超时错误
今天用抹茶(mocha)做个测试,发现有一个测试项目总是超时: describe("DbFactory functions",function(){ it("query ...
- 使用 xunit 编写测试代码
使用 xunit 编写测试代码 Intro xunit 是 .NET 里使用非常广泛的一个测试框架,有很多测试项目都是在使用 xunit 作为测试框架,不仅仅有很多开源项目在使用,很多微软的项目也在使 ...
- .NET单元测试的艺术-3.测试代码
开篇:上一篇我们学习单元测试和核心技术:存根.模拟对象和隔离框架,它们是我们进行高质量单元测试的技术基础.本篇会集中在管理和组织单元测试的技术,以及如何确保在真实项目中进行高质量的单元测试. 系列目录 ...
- mysql锁 实战测试代码
存储引擎 支持的锁定 MyISAM 表级锁 MEMORY 表级锁 InnoDB 行级锁 BDB 页面锁 表级锁:开销小,加锁快:不会出现死锁:锁定粒度大,发生锁冲突的概率最高,并发度最低.行级锁:开销 ...
- 使用Microsoft Fakes隔离测试代码
在单元测试(Unit Test)中我们遇到的问题之一是:假如被测试组件(类或项目)为A,组件A依赖于组件B,那么在组件A的单元测试ATest中测试A时,也需要依赖于B,在B发生改动后,就可能影响到A的 ...
- 在内核中异步请求设备固件firmware的测试代码
在内核中异步请求设备固件firmware的测试代码 static void ghost_load_firmware_callback(const struct firmware *fw, void * ...
- x264测试代码
建立一个工程,将头文件,库文件加载到工程,测试代码如下:#include <iostream>#include <string>#include "stdint.h& ...
随机推荐
- myeclipes使用过程中的错误解决方案
1.‘Building workspace’ has encountered a problem. Errors occurred during the build. 解决方案:这样的错误,主要是由于 ...
- richTextBoxBulletClass
设置和获取选中的样式为 1. 2. 3. #region 数字序列 1. 2. 3. 4. 5. ... private bool bOrder = false; public bool Select ...
- C# 动态创建出来的窗体间的通讯 delegate2
附件:http://files.cnblogs.com/xe2011/CSharp_WindowsForms_delegate02.rar 窗体2 和窗体3 都是动态创建出来的 现在 FORM3.TE ...
- flex利用webservice上传照片
WebService端代码 /// <summary> /// 上传文件到远程server /// </summary> /// <param name="fi ...
- TimeUnit(转)
java.util.concurrent并发库是JDK1.5新增的,其作者是Doug Lea ,此人是个BOSS级别的天才人物了.有了他提供的类库,使得我们对多线程并发.锁有了很大的帮助,减少了并发难 ...
- 通过源码看android系列之multidex库
我们在开发项目时,喜欢引入好多的第三方包,大大的方便了我们的开发,但同时,因为android方法总数的限制,不能超过65k,然而呢,随着我们的开发,65k最终还是会超过,所以,google就给出了这个 ...
- android 70 使用ListView把数据显示至屏幕
使用单元测试添加数据: package com.itheima.showdata; import java.sql.ResultSet; import android.content.Context; ...
- oracle16 例外
例外处理 例外的分类 oracle将例外分为预定义例外,非预定义例外和自定义例外三种. 预定义例外用于处理常见的oracle错误 非预定义例外用于处理预定义例外不能处理的例外 自定义例外用于处理与or ...
- oracle6
转换函数 介绍 转换函数用于将数据类型从一种转为另外一种.在某些情况下,oracle server允许值的数据类型和实际的不一样,这时oracle server会隐含的转化数据类型 比如: crea ...
- IOS Remote Notification
1. 本地证书合成 rm *.pem echo "export cert..." openssl pkcs12 -clcerts -nokeys -out push_cert.pe ...