#import <Foundation/Foundation.h>
#import "Student.h"
int main(int argc,constchar * argv[]) {
NSString *str =@"123456";
NSString *strCopy = [strcopy];
NSString *strMCopy = [strmutableCopy];
NSLog(@"%p, %2ld", str, str.retainCount);
NSLog(@"%p, %2ld", strCopy, strCopy.retainCount);
NSLog(@"%p, %2ld", strMCopy, strMCopy.retainCount);
NSLog(@"\n");
// 2015-07-27 18:35:44.418 TEXT[4933:148940] 0x100002050, -1
// 2015-07-27 18:35:44.419 TEXT[4933:148940] 0x100002050, -1
// 2015-07-27 18:35:44.419 TEXT[4933:148940] 0x100204c60, 1
NSArray *arr =@[@"1",@"2"];
NSArray *arrCopy = [arrcopy];
NSArray *arrMCopy = [arrmutableCopy];
NSLog(@"%p, %2ld", arr, arr.retainCount);
NSLog(@"%p, %2ld", arrCopy, arrCopy.retainCount);
NSLog(@"%p, %2ld", arrMCopy, arrMCopy.retainCount);
NSLog(@"\n");
// 2015-07-27 18:35:44.419 TEXT[4933:148940]
// 2015-07-27 18:35:44.420 TEXT[4933:148940] 0x1003001f0, 2
// 2015-07-27 18:35:44.420 TEXT[4933:148940] 0x1003001f0, 2
// 2015-07-27 18:35:44.420 TEXT[4933:148940] 0x100300000, 1
NSDictionary *dic =@{@"1" :@"2"};
NSDictionary *dicCopy = [diccopy];
NSMutableDictionary *dicMCopy = [dicmutableCopy];
NSLog(@"%p, %2ld", dic, dic.retainCount);
NSLog(@"%p, %2ld", dicCopy, dicCopy.retainCount);
NSLog(@"%p, %2ld", dicMCopy, dicMCopy.retainCount);
NSLog(@"\n");
// 2015-07-27 18:35:44.420 TEXT[4933:148940] 0x100300580, 2
// 2015-07-27 18:35:44.420 TEXT[4933:148940] 0x100300580, 2
// 2015-07-27 18:35:44.420 TEXT[4933:148940] 0x100300850, 1
NSMutableString *mStr = [strmutableCopy];
NSMutableString *mStrMCopy = [mStrmutableCopy];
NSLog(@"%p, %2ld", mStr, mStr.retainCount);
NSLog(@"%p, %2ld", mStrMCopy, mStrMCopy.retainCount);
NSLog(@"\n");
// 2015-07-27 18:35:44.421 TEXT[4933:148940] 0x100400420, 1
// 2015-07-27 18:35:44.421 TEXT[4933:148940] 0x100400500, 1
NSMutableArray *mArr = [arrmutableCopy];
NSMutableArray *mArrCopy = [mArrcopy];
NSMutableArray *mArrMCopy = [mArrmutableCopy];
NSLog(@"%p, %2ld", mArr, mArr.retainCount);
NSLog(@"%p, %2ld", mArrCopy, mArrCopy.retainCount);
NSLog(@"%p, %2ld", mArrMCopy, mArrMCopy.retainCount);
NSLog(@"\n");
// 2015-07-27 18:35:44.421 TEXT[4933:148940] 0x100106a50, 1
// 2015-07-27 18:35:44.421 TEXT[4933:148940] 0x10010ca10, 1
// 2015-07-27 18:35:44.421 TEXT[4933:148940] 0x10010ca30, 1
Student *stu = [StudentstudentWithName:@"xiaolei"andScore:66];
Student *stuCopy = [stucopy];
Student *stuMCopy = [stumutableCopy];
NSLog(@"%p, %ld", stu, stu.retainCount);
NSLog(@"%p, %ld", stuCopy, stuCopy.retainCount);
NSLog(@"%p, %ld", stuMCopy, stuMCopy.retainCount);
// 2015-07-27 19:07:07.222 TEXT[5185:159328] 0x100110510, 2
// 2015-07-27 19:07:07.222 TEXT[5185:159328] 0x100110510, 2
// 2015-07-27 19:07:07.237 TEXT[5185:159328] 0x1001109b0, 1
return0;
}
#import <Foundation/Foundation.h>
@interface Student :NSObject<NSCopying,NSMutableCopying>
@property(nonatomic,copy)NSString *name;
@property(nonatomic,retain)NSMutableArray *arr;
@property(nonatomic,assign)CGFloat score;
- (instancetype)initWithName:(NSString *)name
andScore:(CGFloat)score;
+ (Student *)studentWithName:(NSString *)name
andScore:(CGFloat)score;
@end
#import "Student.h"
@implementation Student
- (instancetype)initWithName:(NSString *)name
andScore:(CGFloat)score{
self = [superinit];
if (self) {
self.name = name;
self.score = score;
self.arr = [NSMutableArrayarray];
}
return self;
}
+ (Student *)studentWithName:(NSString *)name
andScore:(CGFloat)score{
Student *stu = [[Studentalloc]initWithName:nameandScore:score];
return stu;
}
- (void)dealloc{
[_arrrelease];
[_namerelease];
[superdealloc];
}
- (id)copyWithZone:(NSZone *)zone{
return [self retain];
}
- (id)mutableCopyWithZone:(NSZone *)zone{
Student *stu = [StudentallocWithZone:zone];
stu.name =_name;
stu.score =_score;
stu.arr =_arr;
return [stu autorelease];
}
@end