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& ...
随机推荐
- JavaScript-每隔5分钟执行一次ajax请求的实现方法
个页面好像只能有一个 window.onload=function(){},所以要有多个事件,这样写就好了 window.onload=function(){ //假设这里每个五分钟执行一次test函 ...
- android 65 文件访问权限
package com.itheima.createfile; import java.io.File; import java.io.FileNotFoundException; import ja ...
- 通过查看mysql 配置参数、状态来优化你的mysql
mysql的监控方法大致分为两类: 1.连接到mysql数据库内部,使用show status,show variables,flush status 来查看mysql的各种性能指标. 2. 直接使用 ...
- 编写跨平台代码之memory alignment
编写网络包(存储在堆上)转换程序时,在hp-ux机器上运行时会遇到 si_code: 1 - BUS_ADRALN - Invalid address alignment. Please refer ...
- Struts工作流程
Java Web 都是使用线程来处理用户的请求(request)的,一次请求对应一个处理线程.Struts 2会为每个处理线程分配一个Action对象, 将提交的参数注射到Action属性中,并调用A ...
- android开发之gridlayout使用入门
这个东东以前没怎么用过,今天研究了一下,不难,感觉只是在某些方面很好用. 记录下,做个计算器. <GridLayout xmlns:android="http://schemas.an ...
- CentOS7使用Redis
使用Python操作Redis 安装pip # yum install python-pip 升级pip # pip install --upgrade pip 安装redis-py库 # pip i ...
- enable cors in spring mvc with swagger
a. In controller add @CrossOrigin(origins = "http://localhost:8080") b. In mvc-servlet.xml ...
- USB开发——内核USB驱动+libusb开发方法
linux内核已经具备usb驱动,所以一些设备使用可以免驱,libusb是针对linux内核中ubs驱动的一套api,会自行调用usb驱动接口,并为应用提供api接口,将usb设备开发减少为应用层开发 ...
- (转)Java爬虫,信息抓取的实现
转载请注明出处:http://blog.csdn.net/lmj623565791/article/details/23272657 今天公司有个需求,需要做一些指定网站查询后的数据的抓取,于是花了点 ...