整個《面試題》都是對[2017年6月iOS招人心得(附面試題)]的整理
1.可變集合類 和 不可變集合類的 copy 和 mutablecopy有什么區(qū)別磷支?
2.如果集合是內(nèi)容復制的話,集合里面的元素也是內(nèi)容復制么食寡?
不是雾狈,是單層深拷貝。
??集合的深復制有兩種方法抵皱∩崎唬可以用initWithArray:copyItems:將第二個參數(shù)設置為YES即可深復制
NSDictionary shallowCopyDict=[[NSDictionary alloc] initWithDictionary:someDictionary copyItems:YES];
如果你用這種方法深復制,集合里的每個對象都會收到copyWithZone:消息呻畸。如果集合里的對象遵循NSCopying協(xié)議移盆,那么對象就會被深復制到新的集合。如果對象沒有遵循NSCopying協(xié)議伤为,而嘗試用這種方法進行深復制咒循,會在運行時出錯。copyWithZone:這種拷貝方式只能夠提供一層內(nèi)存拷貝(one-level-deepcopy),而非真正的深復制叙甸。
第二個方法是將集合進行歸檔(archive)颖医,然后解檔(unarchive),如:
NSArray*trueDeepCopyArray=[NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject:oldArray]];