copy與strong的舉例

//
//  Student.h
//  內存計數
//
//  Created by 張凱澤 on 16/7/24.
//  Copyright © 2016年 rytong_zkz. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface Student : NSObject
@property(nonatomic,strong)NSMutableString *name;

@end


//
//  Student.m
//  內存計數
//
//  Created by 張凱澤 on 16/7/24.
//  Copyright © 2016年 rytong_zkz. All rights reserved.
//

#import "Student.h"

@implementation Student
-(void)setName:(NSMutableString *)name
{
    if (_name!=name) {
        [_name release];
        _name = [name copy];
    }
}
-(void)dealloc{
    [super dealloc];
    NSLog(@"stuent dealloc");
}
@end
//
//  main.m
//  內存計數
//
//  Created by 張凱澤 on 16/7/24.
//  Copyright © 2016年 rytong_zkz. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Person.h"
#import "Student.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        //Person * p = [[[Person alloc]init] autorelease];
        
        Student * s = [[[Student alloc]init]autorelease];
        NSMutableString * string = [[[NSMutableString alloc]initWithString:@"liss"]autorelease];
        s.name = string;
        NSLog(@"%@------%p",s.name,s.name);
        [string appendString:@"xxxxx"];
         NSLog(@"%@------%p",s.name,s.name);
        /*
         若是在student name屬性設置爲strong類型
         2016-07-26 21:13:11.126 內存計數[61170:432980] liss------0x100203660
         2016-07-26 21:13:11.127 內存計數[61170:432980] lissxxxxx------0x100203660
         2016-07-26 21:13:11.127 內存計數[61170:432980] stuent dealloc
         由於string是可變類型,它進行改變後name屬性也會進行修改。
         
         
         若是在student name屬性設置爲copy類型
         2016-07-26 21:14:39.204 內存計數[61262:434021] liss------0x7373696c45
         2016-07-26 21:14:39.206 內存計數[61262:434021] liss------0x7373696c45
         2016-07-26 21:14:39.206 內存計數[61262:434021] stuent dealloc
         由於string是可變類型,它進行改變後,由於name屬性是copy協議因此不會改變
         */
    }
    return 0;
}
相關文章
相關標籤/搜索