zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    MapReduce中压缩的使用体验
    weblogic 12安装及和Eclipse的整合
    常用正则表达式补充1
    C# 中利用 Conditional 定义条件方法
    金额文本框
    C#中的List<string>泛型类示例
    HTML ID和Name属性的区别
    CSS的position:fixed的使用
    C# 匿名方法和Lambda表达式
    C#设置开机启动程序
  • 原文地址:https://www.cnblogs.com/code-style/p/3956450.html
Copyright © 2011-2022 走看看