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;
    }
  • 相关阅读:
    VBA键码常数
    枚举
    海龟交易法则及头寸
    HQL.TOP
    jquery.cookie
    机械操作产品分析.
    Repeater排序2
    Repeater排序
    json
    LoginStatus注销控件
  • 原文地址:https://www.cnblogs.com/code-style/p/3956450.html
Copyright © 2011-2022 走看看