এমন কোনও বিল্ট-ইন ফাংশন রয়েছে যা আমাকে একটি গভীর অনুলিপি করতে দেয় NSMutableArray?
আমি চারপাশে তাকালাম, কিছু লোক বলেছেন [aMutableArray copyWithZone:nil]গভীর কপি হিসাবে কাজ করে। তবে আমি চেষ্টা করেছি এবং এটি একটি অগভীর অনুলিপি বলে মনে হচ্ছে।
এখনই আমি ম্যানুয়ালি একটি forলুপ দিয়ে অনুলিপিটি করছি :
//deep copy a 9*9 mutable array to a passed-in reference array
-deepMuCopy : (NSMutableArray*) array
toNewArray : (NSMutableArray*) arrayNew {
[arrayNew removeAllObjects];//ensure it's clean
for (int y = 0; y<9; y++) {
[arrayNew addObject:[NSMutableArray new]];
for (int x = 0; x<9; x++) {
[[arrayNew objectAtIndex:y] addObject:[NSMutableArray new]];
NSMutableArray *aDomain = [[array objectAtIndex:y] objectAtIndex:x];
for (int i = 0; i<[aDomain count]; i++) {
//copy object by object
NSNumber* n = [NSNumber numberWithInt:[[aDomain objectAtIndex:i] intValue]];
[[[arrayNew objectAtIndex:y] objectAtIndex:x] addObject:n];
}
}
}
}
তবে আমি একটি ক্লিনার, আরও সংক্ষিপ্ত সমাধান চাই।
-copyম্যাক ওএস এক্স 10.4 এবং 10.5 এর মধ্যে অপরিবর্তনীয় সংগ্রহগুলি নিয়ে আচরণের পরিবর্তন হয়েছে: বিকাশকারী.অ্যাপলস / লিবারি / ম্যাক / রিলিজ নোটস / কোকোয়া / (("অপরিষ্কার সংগ্রহ এবং অনুলিপি আচরণ" -এ স্ক্রোল করুন)
copyকরে তবে "গভীর অনুলিপি" তে কী রাখা হবে? যদি উপাদানটি অন্য সংগ্রহ copyহয় তবে আসলে একটি অনুলিপি দেয় না (একই শ্রেণীর) class সুতরাং আমি মনে করি এটি নির্দিষ্ট ক্ষেত্রে কপির প্রকারটি নিয়ে তর্ক করা পুরোপুরি বৈধ।
NSCopying/ -copyতবে তা অনুলিপিযোগ্য নয় — সুতরাং এটির অনুলিপি করার জন্য আপনার কখনও চেষ্টা করা উচিত নয়, কারণ এটি এমন দক্ষতা নয় যা এটি তৈরি করার জন্য তৈরি করা হয়েছিল। কোকো বাস্তবায়নের ক্ষেত্রে, অনুলিপিযোগ্য অবজেক্টগুলিতে প্রায়শই কিছু সি ব্যাকএন্ডের অবস্থা থাকে যার সাথে তারা আবদ্ধ থাকে, সুতরাং বস্তুর সরাসরি কপি হ্যাক করার কারণে জাতিগত পরিস্থিতি বা আরও খারাপ হতে পারে। সুতরাং "গভীর অনুলিপিটিতে কী দেওয়া হবে" - উত্তর দেওয়ার জন্য একটি আটকানো রেফ আপনি যখন কোনও অ- NSCopyingঅবজেক্ট রাখেন তখন কেবলমাত্র আপনি যে কোনও জায়গায় রাখতে পারেন ।