strong vs copy,strongvs
一、前言 在這裡,我通過執行個體去介紹strong和copy的區別(%p列印出來對象的地址) ViewController.h
#import <UIKit/UIKit.h>@interface ViewController : UIViewController@property(nonatomic,strong) NSString *name;@endViewController.m - (void)viewDidLoad { [super viewDidLoad]; NSMutableString *myName = [NSMutableString stringWithString:@"zhangsan"]; self.name = myName; NSLog(@"myName's address:%p",myName); NSLog(@"self.name's address:%p",self.name);}
運行結果是:
2015-07-21 16:38:50.911 Test[4369:2323491] myName's address:0x7967f4c02015-07-21 16:38:50.912 Test[4369:2323491] self.name's address:0x7967f4c0
而當我們把.h中的strong改成copy時,
@property(nonatomic,copy) NSString *name;
運行結果是:
2015-07-21 16:40:09.938 Test[4394:2330879] myName's address:0x78deb9b02015-07-21 16:40:09.938 Test[4394:2330879] self.name's address:0x78dea270
對比可以發現: 當我們使用strong時,myName對象和self.name的地址相同,說明兩者指向的是同一個地址空間:
0x7967f4c0
而當我們把.h中name的strong改成copy時,myName和self.name地址不同,說明兩者指向的是不同的地址空間。 myName是:
0x78deb9b0 self.name是:
0x78dea270 這說明:當我們使用copy的時候表示擁有不同的儲存空間,存放的是相同的內容。因此如果我們對myName進行修改,self.name是不會受到影響的。 總結: 這裡你應該學到: 1、strong和copy的區別 2、我們可以用%p列印出對象的地址。