iOS 中關於Copy的疑問彙總
阿新 • • 發佈:2019-02-10
前言
小編近幾年開發或面試中,自己或同事趟過的關於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