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