// // 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; }