• 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;
    }
  • 相关阅读:
    HTML: vertical algin Big/small div in same row (bootstrap)
    unix时间转换
    chrome工具分析
    DNF 包管理器
    安装nodejs
    location属性解释
    angular深入理解途径
    ui-router与ngRoute
    angular $location服务获取url
    Python文件操作
  • 原文地址:https://www.cnblogs.com/code-style/p/3956450.html
Copyright © 2020-2023  润新知