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=0; i<10; 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=0; i<10; 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 0;
}
时间: 2024-10-31 14:11:17

property测试代码:的相关文章

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

 1 PersonTestMapper.xml中的内容如下: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!-- namespace:命名空间

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

测试驱动开发并不是一个很新鲜的概念了.在我最开始学习程序编写时,最喜欢干的事情就是编写一段代码,然后运行观察结果是否正确.我所学习第一门语言是c语言,用的最多的是在算法设计上,那时候最常做的事情就是编写了一段代码,如何编译运行,查看结果是否正确,很多时候,还得自己想很多特殊的(比如说零值,边界值)测试数据来检测所写代码.算法是否正确.那个时候,感觉还好,比较输出只是只是控制台的一个简单的数字或者字符.在学习iOS开发中,很多时候也是要测试的,这种输出是必须在点击一系列按钮之后才能在屏幕上显示出来

测试代码

   编写函数或类时,还可以为其编写测试.通过测试,可确定代码面对各种输入都能够按照要求那样工作. 单元测试和测试用例:   单元测试用于核实蛮熟的某个方面没有问题:测试用例是一组单元测试,这些单元测试一起核实函数在各种情形下的行为都符合要求. 良好的测试用例考虑到了函数可能收到的各种输入,包含针对这些所有情形的测试. 全覆盖测试用例包含一整套单元测试,涵盖了各种可能的函数使用方式.对于大型项目,要实现覆盖可能很难.所以通常,最初只要针对 代码的重要行为编写测试即可,等项目被广泛使用率再考虑全覆

第4次作业类测试代码+105032014166+张珍珍

第4次作业:准备类测试代码 类测试代码的具体要求如下: (1)设计三角形完整程序 已经完成的方法是:  String triangle(int a,int b,int c) 现在要求继续增加新的功能: 建立界面,至少包含以下元素,但不限于此: 完成面积的方法:float triangleArea(int a,int b,int c) ,完成周长的方法:int perimeter(int a,int b,int c) 要求: 1.        画出类图: 2.        完成界面和相应的功能

Android网络传输中必用的两个加密算法:MD5 和 RSA (附java完成测试代码)

MD5和RSA是网络传输中最常用的两个算法,了解这两个算法原理后就能大致知道加密是怎么一回事了.但这两种算法使用环境有差异,刚好互补. 一.MD5算法 首先MD5是不可逆的,只能加密而不能解密.比如明文是yanzi1225627,得到MD5加密后的字符串是:14F2AE15259E2C276A095E7394DA0CA9  但不能由后面一大串倒推出yanzi1225627.因此可以用来存储用户输入的密码在服务器上.现在下载文件校验文件是否中途被篡改也是用的它,原理参见:http://blog.c

MyPython--&gt;进阶篇--&gt;测试代码

测试函数 要学习测试,得要有测试的代码.下面是一个简单的函数,接受名和姓并返回整洁的姓名 name_function.py def get_allname(x,m): allname = ('%s %s'%(x,m)).title() return allname 编写测试代码 from name_function import get_allname print(get_allname('cc','leo')) import unittest class NameTestCase(unitte

x264测试代码

建立一个工程,将头文件,库文件加载到工程,测试代码如下:#include <iostream>#include <string>#include "stdint.h"  //如果没有,下载地址为:http://download.csdn.net/detail/evsqiezi/7014021extern "C"{#include "x264.h"#include "x264_config.h"};usi

Maven配置插件跳过测试代码的编译和运行

Maven配置插件跳过测试代码的编译和运行: <!-- 编译插件 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.7</source> <target>1.7</targe

linux下libphenom的测试代码

使用说明:测试使用libphenom库的字符串追加函数,效率是strcat的60多倍.所以在进行大量的字符串累加的时候可以考虑使用libphenom库  依赖库: ck-0.4.5.tar.gz cmake-3.1.2.tar.gz libtap-1.12.0.tar.bz2 libphenom.tar.gz 头文件: #include <phenom/sysutil.h> #include <phenom/string.h> #include <phenom/stream.