1. 程式人生 > >iOS 中關於Copy的疑問彙總

iOS 中關於Copy的疑問彙總

前言

小編近幾年開發或面試中,自己或同事趟過的關於Copy的坑,現收集彙總如下:

疑問程式碼

// 有的人用 strong 有的用copy
@interface ViewController ()
@property (nonatomic, strong) NSString *str;
@end
// 深淺Copy 啥區別,下面程式碼是深了還是淺了 ?
NSMutableString *mutStr = [NSMutableString stringWithFormat:@"zyy"];
NSString *aCopyStr = [mutStr copy];
// 怎麼沒見過這樣寫程式碼的?
@interface ViewController () @property (nonatomic, copy) UIView *aCopyView; @end
// 容器本身和容器內元素 都是深拷貝嗎?
@interface ViewController ()
@property (nonatomic, copy) NSMutableArray *aCopyArray;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    NSMutableArray  *mutArray = [[NSMutableArray
alloc] init]; NSMutableString *mstr1 = [[NSMutableString alloc]initWithString:@"zyy1"]; NSMutableString *mstr2 = [[NSMutableString alloc]initWithString:@"zyy2"]; [mutArray addObject:mstr1]; [mutArray addObject:mstr2]; self.aCopyArray = mutArray; }
// 2個協議和copy、mutableCopy 啥關係? 為什麼陣列、字典、字串 都遵守了這2個協議
@protocol NSCopying - (id)copyWithZone:(nullable NSZone *)zone; @end @protocol NSMutableCopying - (id)mutableCopyWithZone:(nullable NSZone *)zone; @end

Crash崩潰程式碼示例

@interface ViewController ()
@property (nonatomic, copy) NSMutableArray *mutableArray;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    NSMutableArray *array = [NSMutableArray arrayWithObjects:@"1",@"2",nil];
    self.mutableArray = array;
    [self.mutableArray removeObjectAtIndex:0];
}
- (void)viewDidLoad {
    [super viewDidLoad];
    NSMutableString *string = [NSMutableString stringWithString: @"origin"];
    NSMutableString *mStringCopy = [string copy];
    NSMutableString *stringMCopy = [string mutableCopy];
    [mStringCopy appendString:@"mm"];
    [stringMCopy appendString:@"!!"];
}
@interface ViewController ()
@property (nonatomic, copy) UIView *aCopyView;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    self.aCopyView = [[UIView alloc] init];
}

正確答案

// 待補充,後續更新。

感謝

如果你對以上程式碼有不解的地方,請檢視我這篇部落格(點選) 或許對你有所幫助。

最後,感謝感謝大家的閱讀,希望對您有所幫助。如果有錯誤的地方或者不理解的地方,希望大家在評論區積極指出。如果對您有所幫助,希望給作者點個贊,您的支援是我最核心的動力。

也歡迎大家提出自己在工作或者面試中 趟過的關於Copy的一些坑,歡迎給我留言,小編後續一起更新上。

更多iOS技術交流
請加群: 553633494