1. 程式人生 > >用copy修飾一個可變字串時,編譯器到底做了什麼

用copy修飾一個可變字串時,編譯器到底做了什麼

#import "ViewController.h"

@interfaceViewController ()

@property (nonatomic,copy) NSMutableString* mString;

@end

/*

其實宣告這樣一個屬性時,編譯器在setter方法中做了如下操作

 - (void)setMString:(NSMutableString *)mString{

    _mString = mString.copy;

 }

 */

@implementation ViewController

- (void)viewDidLoad {

    [super

viewDidLoad];

//    [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的型別是一個可變的,

     */

}

/**

總結:通過test01test02的列印結果的對比,我們可以發現編譯器是在setter方法中做了如下操作

 - (void)setMString:(NSMutableString *)mString{

 _mString = mString.copy;

 }

我們也可以通過這裡聯想,其實setter方法裡面是如何賦值是根據屬性的修飾符來決定的,weak strong copy assign

 */

@end