用copy修飾一個可變字串時,編譯器到底做了什麼
#import "ViewController.h"
@interfaceViewController ()
@property (nonatomic,copy) NSMutableString* mString;
@end
/*
其實宣告這樣一個屬性時,編譯器在setter方法中做了如下操作
- (void)setMString:(NSMutableString *)mString{
_mString = mString.copy;
}
*/
@implementation ViewController
- (void)viewDidLoad {
[super
// [self test01];
[selftest02];
}
-(void) test01{
self.mString = [NSMutableStringstring];
NSLog(@"%@",[self.mStringclass]);
/*
列印結果:
2015-12-19 21:39:05.038 關於屬性中的copy的意思[1280:77012] __NSCFConstantString
我們可以發現這個時候的mString已經變成了一個不可變的,原因是因為
self.mString呼叫了預設的setter方法
*/
}
-(void) test02{
_mString = [NSMutableStringstring];
NSLog(@"%@",[_mStringclass]);
/*
列印結果:
2015-12-19 21:41:41.458 關於屬性中的copy的意思[1298:78372] __NSCFString
我們可以發現mString的型別是一個可變的,
*/
}
/**
總結:通過test01和test02的列印結果的對比,我們可以發現編譯器是在setter方法中做了如下操作
- (void)setMString:(NSMutableString *)mString{
_mString = mString.copy;
}
我們也可以通過這裡聯想,其實setter方法裡面是如何賦值是根據屬性的修飾符來決定的,weak strong copy assign
*/
@end