tldr: চিত্রযুক্ত নাম ঠিক আছে। এটি স্মৃতি ভালভাবে পরিচালনা করে। এটি ব্যবহার করুন এবং উদ্বেগ বন্ধ করুন।
নভেম্বর 2012 সম্পাদনা করুন : নোট করুন যে এই প্রশ্নটি আইওএস ২.০ থেকে এসেছে! তখন থেকে চিত্রের প্রয়োজনীয়তা এবং হ্যান্ডলিং প্রচুর পরিমাণে সরানো হয়েছে। রেটিনা চিত্রগুলি বড় করে এগুলিকে আরও জটিল করে তোলে। আইপ্যাড এবং রেটিনা চিত্রগুলির জন্য অন্তর্নির্মিত সমর্থন সহ, আপনার অবশ্যই আপনার কোডটিতে চিত্রনাম ব্যবহার করা উচিত। এখন, উত্তরোত্তর জন্য:
বোন থ্রেড অ্যাপল দেব ফোরামে কিছু ভাল ট্রাফিক লাভ করেন। বিশেষত রিনসউইন্ড কিছু কর্তৃত্ব যুক্ত করেছিলেন।
আইফোন ওএস ২.০-তে এমন কিছু সমস্যা রয়েছে যেখানে চিত্রটির নাম দেওয়া হয়েছে: মেমরির সতর্কতার পরেও ক্যাশে সাফ হবে না। একই সময়ে + ইমেজ নামকরণ: ক্যাশের জন্য নয়, বরং সুবিধার্থে প্রচুর ব্যবহার পেয়েছে, যা সম্ভবত সমস্যাটি যতটা হওয়া উচিত ছিল তার চেয়ে বেশি বাড়িয়ে তুলেছে।
যে সতর্কতা যখন
গতির সম্মুখভাগে, কী চলছে তা নিয়ে একটি সাধারণ ভুল ধারণা রয়েছে। সর্বাধিক জিনিসটি যা + ইমেজনামড করে: উত্স ফাইলটি থেকে চিত্রের ডেটা ডিকোড করা হয় যা প্রায় সবসময় উল্লেখযোগ্যভাবে ডেটা আকারকে স্ফীত করে তোলে (উদাহরণস্বরূপ, একটি স্ক্রিন আকারের পিএনজি ফাইল সংকোচনের সময় কয়েক ডজন কেবি ব্যবহার করতে পারে, তবে অর্ধ এমবি ব্যবহার করে সঙ্কুচিত - প্রস্থ * উচ্চতা * 4)। বিপরীতে + চিত্রউইথ কনটেন্টস অফফাইলে: প্রতিবারের চিত্রের প্রয়োজন হয় সেই চিত্রটিকে সঙ্কুচিত করবে। আপনি যেমন কল্পনা করতে পারেন, আপনার যদি একবারে কেবলমাত্র চিত্রের ডেটা প্রয়োজন হয়, আপনি এখানে চিত্রের ক্যাশেড সংস্করণটি ঝুলানো ব্যতীত আর কিছুই পান না, এবং সম্ভবত আপনার প্রয়োজনের চেয়ে বেশি সময়ের জন্য এটি থাকতে পারে। তবে, আপনার যদি এমন একটি বড় চিত্র থাকে যা আপনার প্রায়শই পুনরায় চিত্র আঁকার প্রয়োজন, তবে বিকল্পগুলি রয়েছে, যদিও আমি প্রাথমিকভাবে সুপারিশ করব এটি হ'ল বড় চিত্রটি পুনরায় আঁকানো এড়ানো :) :)
ক্যাশের সাধারণ আচরণের ক্ষেত্রে, এটি ফাইলের উপর ভিত্তি করে ক্যাশে করে (সুতরাং + চিত্রনামের দুটি উদাহরণ: একই নামের সাথে একই ক্যাশেড ডেটার উল্লেখ করা উচিত) এবং আপনি আরও চিত্রের মাধ্যমে অনুরোধ করার সাথে সাথে ক্যাশে গতিশীলভাবে বৃদ্ধি পাবে am + + imageNamed :. আইফোনের ওএসে 2.xa বাগ মেমরির সতর্কতা পাওয়ার পরে ক্যাশে সঙ্কুচিত হওয়া থেকে বাধা দেয়।
এবং
আমার বোধগম্যতা হল যে + চিত্রনামযুক্ত: ক্যাশে আইফোন ওএস 3.0 এ মেমরির সতর্কতাগুলিকে সম্মান করবে। আপনি যখন চান্স পাবেন তখন এটি পরীক্ষা করুন এবং বাগগুলি প্রতিবেদন করুন যদি আপনি দেখতে পান যে এটি তেমন নয়।
তাই সেখানে যদি আপনি এটি আছে. ইমেজ নামকরণ: আপনার উইন্ডোজগুলি ছিন্ন করতে বা আপনার শিশুদের হত্যা করবে না। এটি বেশ সহজ তবে এটি একটি অপটিমাইজেশন সরঞ্জাম। দুঃখজনকভাবে এটির নামকরণ করা হয়েছে এবং ব্যবহারের মতো সমান কোনও সমতুল্য নেই - তাই লোকেরা এটিকে অতিরিক্ত ব্যবহার করে এবং যখন এটি কেবল তার কাজটি করে তখন বিচলিত হয়
আমি এটি সংশোধন করতে ইউআইআইমেজে একটি বিভাগ যুক্ত করেছি:
// header omitted
// Before you waste time editing this, please remember that a semi colon at the end of a method definition is valid and a matter of style.
+ (UIImage*)imageFromMainBundleFile:(NSString*)aFileName; {
NSString* bundlePath = [[NSBundle mainBundle] bundlePath];
return [UIImage imageWithContentsOfFile:[NSString stringWithFormat:@"%@/%@", bundlePath,aFileName]];
}
রিন্সউইন্ড আপনার নিজস্ব অনুকূলিত সংস্করণ তৈরি করতে কয়েকটি উদাহরণ কোডও অন্তর্ভুক্ত করেছে। আমি দেখতে পাচ্ছি না এটি মূলধারার পক্ষে মূল্যবান তবে এখানে এটি সম্পূর্ণতার জন্য।
CGImageRef originalImage = uiImage.CGImage;
CFDataRef imageData = CGDataProviderCopyData(
CGImageGetDataProvider(originalImage));
CGDataProviderRef imageDataProvider = CGDataProviderCreateWithCFData(imageData);
CFRelease(imageData);
CGImageRef image = CGImageCreate(
CGImageGetWidth(originalImage),
CGImageGetHeight(originalImage),
CGImageGetBitsPerComponent(originalImage),
CGImageGetBitsPerPixel(originalImage),
CGImageGetBytesPerRow(originalImage),
CGImageGetColorSpace(originalImage),
CGImageGetBitmapInfo(originalImage),
imageDataProvider,
CGImageGetDecode(originalImage),
CGImageGetShouldInterpolate(originalImage),
CGImageGetRenderingIntent(originalImage));
CGDataProviderRelease(imageDataProvider);
UIImage *decompressedImage = [UIImage imageWithCGImage:image];
CGImageRelease(image);
এই কোডটির সাথে বাণিজ্যটি হ'ল ডিকোডযুক্ত চিত্রটি আরও মেমরি ব্যবহার করে তবে রেন্ডারিং দ্রুত হয়।