আপনি -retainCount
এখন পর্যন্ত কোন পরিস্থিতিতে ব্যবহার করেছেন এবং অবশেষে এটি ব্যবহার করে যে সমস্যা হতে পারে তা জানতে চাই।
ধন্যবাদ।
আপনি -retainCount
এখন পর্যন্ত কোন পরিস্থিতিতে ব্যবহার করেছেন এবং অবশেষে এটি ব্যবহার করে যে সমস্যা হতে পারে তা জানতে চাই।
ধন্যবাদ।
উত্তর:
আপনার কখনই ব্যবহার করা উচিত নয় -retainCount
, কারণ এটি আপনাকে দরকারী কিছু বলে না। ফাউন্ডেশন এবং অ্যাপকিট / ইউআইকিট ফ্রেমওয়ার্কগুলির বাস্তবায়ন অস্বচ্ছ; আপনি কী জানেন যে কী ধরে রাখা হচ্ছে, কেন এটি ধরে রাখা হচ্ছে, কে এটি ধরে রাখছে, কখন ধরে রাখা হয়েছিল ইত্যাদি and
উদাহরণ স্বরূপ:
[NSNumber numberWithInt:1]
একটি হবে retainCount
1. আইটি না। এটা 2।@"Foo"
একটি হবে retainCount
1. আইটি না। এটি 1152921504606846975।[NSString stringWithString:@"Foo"]
একটি হবে retainCount
1. আইটি না। আবার এটি 1152921504606846975।মূলত, যেহেতু যে কোনও জিনিসই কোনও অবজেক্ট ধরে রাখতে পারে (এবং এর ফলে এটি পরিবর্তন করতে পারে retainCount
) এবং যেহেতু অ্যাপ্লিকেশন চালিত বেশিরভাগ কোডের কাছে আপনার উত্স নেই তাই কোনও বস্তুর retainCount
অর্থহীন।
আপনি যদি কোনও বিষয় কেন অবৈধ হয়ে যাচ্ছেন না তা ট্র্যাক করার চেষ্টা করছেন, তবে ইনস্ট্রুমেন্টসে লিকস সরঞ্জামটি ব্যবহার করুন। যদি আপনি খুব শীঘ্রই কোনও জিনিস কেন নির্বিঘ্ন করা হয়েছে তা সন্ধান করার চেষ্টা করছেন, তবে ইনস্ট্রুমেন্টসগুলিতে জম্বি সরঞ্জামটি ব্যবহার করুন।
কিন্তু ব্যবহার করবেন না -retainCount
। এটি একটি সত্যই মূল্যহীন পদ্ধতি।
সম্পাদন করা
দয়া করে প্রত্যেকে http://bugreport.apple.com এ যান এবং হতাশার অনুরোধ করুন -retainCount
। যত বেশি লোকেরা এর জন্য জিজ্ঞাসা করবে তত ভাল।
সম্পাদনা # 2
আপডেট হিসাবে, [NSNumber numberWithInt:1]
এখন retainCount
9223372036854775807 আছে your আপনার কোডটি এটি 2 হওয়ার প্রত্যাশা করে থাকলে আপনার কোডটি এখন ভেঙে গেছে।
- (NSUInteger)retainCount{return NSUIntegerMax;}
।
retainCount
।
সিরিয়াসলি। শুধু এটা করবেন না।
কেবল মেমরি ম্যানেজমেন্ট গাইডলাইনগুলি অনুসরণ করুন এবং কেবলমাত্র আপনাকে alloc
, new
বা copy
(বা আপনি যেটিকে retain
মূলত ডেকেছিলেন ) কেবল প্রকাশ করুন।
@ ব্লুম এখানে এসওতে এবং তার ব্লগে আরও বিশদে এটি সেরা বলেছেন ।
-retainCount
উপার্জন করতে পারবেন তা ইনস্ট্রুমেন্টস এবং এর সরঞ্জামগুলি থেকে পাওয়া যাবে (আরও বিস্তারিতভাবে)।
retain
, retain
, retain
, autorelease,
autorelease, autorelease
UIKit API এর মাধ্যমে একটি বস্তু ক্ষণস্থায়ী, উদাহরণস্বরূপ একটি পুরোপুরি বৈধ ফলাফল হতে পারে।
স্বতঃস্ফুর্ত বস্তু হ'ল এমন একটি ক্ষেত্রে যেখানে -আরেন্টকাউন্ট চেক করা অবিজ্ঞাত এবং সম্ভাব্য বিভ্রান্তিকর। রক্ষণ গণনাটি আপনাকে কোনও বস্তুতে কতবার -উতোরলেজ ডাকা হয়েছিল এবং অতএব বর্তমান অটোরলেলেজ পুল নিকাশী হলে এটি কতবার প্রকাশিত হবে সে সম্পর্কে আপনাকে কিছুই জানায় না।
'ইনস্ট্রুমেন্টস' ব্যবহার করে চেক করা হলে আমি রক্ষণাবেক্ষণগুলি খুব দরকারী মনে করি ।
'বরাদ্দ' সরঞ্জামটি ব্যবহার করে, নিশ্চিত করুন যে 'রেকর্ড রেফারেন্স গণনা' চালু আছে এবং আপনি যে কোনও বস্তুর মধ্যে যেতে পারেন এবং এটির রক্ষণাবেক্ষণের ইতিহাসটি দেখতে পারেন।
বরাদ্দ এবং প্রকাশের জোড়ায় আপনি কী চলছে তার একটি ভাল চিত্র পেতে পারেন এবং প্রায়শই সেই সমস্যাগুলি সমাধান করতে পারেন যেখানে কিছু প্রকাশিত হচ্ছে না।
এটি আমাকে কখনই হতাশ করে না - আইওএসের প্রথম দিকে বিটা রিলিজে বাগ সন্ধান সহ।
এনএসবজেক্টে অ্যাপল ডকুমেন্টেশনটি একবার দেখুন, এটি আপনার প্রশ্নটি বেশ কভার করে: এনএসবজেক্ট রেন্টক্যান্ট
সংক্ষেপে, আপনার নিজের রেফারেন্স গণনা সিস্টেমটি প্রয়োগ না করা হলে রিটেনকাউন্ট সম্ভবত আপনার পক্ষে অকেজো (
অ্যাপলের নিজস্ব কথায়, রিটেনক্যান্ট হ'ল মেমরি পরিচালনার সমস্যাগুলি ডিবাগ করার ক্ষেত্রে সাধারণত কোনও মূল্য থাকে না no
অবশ্যই আপনার কোডগুলিতে আপনাকে রিটেনকাউন্ট পদ্ধতিটি কখনই ব্যবহার করা উচিত নয়, কারণ এর মানটির অর্থ নির্ভর করে যে কতগুলি অটোরিলেজ বস্তুটিতে প্রয়োগ হয়েছে এবং এটি এমন কিছু যা আপনি ভবিষ্যদ্বাণী করতে পারবেন না। তবে এটি ডিবাগিংয়ের জন্য খুব দরকারী - বিশেষত যখন আপনি কোডের মধ্যে মেমরি ফাঁসের শিকার করছেন যা মূল ইভেন্ট লুপের বাইরে অ্যাপকিট অবজেক্টগুলির পদ্ধতিগুলি কল করে - এবং এটি অবহেলা করা উচিত নয়।
আপনার দৃষ্টিভঙ্গি তৈরির প্রয়াসে আপনি গুরুত্বের অনির্বচনীয় প্রকৃতিরটিকে গুরুত্বের সাথে উজাড় করে দিয়েছিলেন। এটি সত্য যে এটি সর্বদা রেফারেন্স গণনা হয় না। কিছু বিশেষ মান রয়েছে যা পতাকাগুলির জন্য ব্যবহৃত হয়, উদাহরণস্বরূপ বোঝাতে যে কোনও বস্তু কখনই বিলোপযুক্ত হওয়া উচিত নয়। 1152921504606846975 এর মতো একটি নম্বর আপনি হেক্সে লিখে এবং 0xfffffffffffffff না পাওয়া অবধি খুব রহস্যময় লাগছে। এবং 9223372036854775807 হেক্সে 0x7fffffffffffffff। এবং এটি সত্যিই এত অবাক হওয়ার মতো নয় যে কোনও ব্যক্তি পতাকা হিসাবে এই জাতীয় মানগুলি বেছে নিতে বেছে নিবে যে আপনি প্রতি সেকেন্ডে রিটেনট্যান্ট 100,000,000 বার বর্ধিত বলে ধরে নিবেন যে বড় সংখ্যার চেয়ে বেশি একটি রিটেনকাউন্ট পেতে প্রায় 3000 বছর সময় লাগবে।
এটি ব্যবহার করে আপনি কী সমস্যা পেতে পারেন? এটি যা করে তা হ'ল অবজেক্টের ধরে রাখা গণনা। আমি কখনই এটি কল করি নি এবং আমি যে কারণ করব তা ভাবতে পারি না। আমি যদিও এটি সিলেটনে না ফেলেছি তা নিশ্চিত করার জন্য এটি সিলেটনে ওভাররাইড করেছে।
retainCount
মেমরি পরিচালনার জন্য ব্যবহার করে ।
আপনার অ্যাপটি চালু না হওয়া এবং চালিত হওয়া এবং দরকারী কিছু না করা পর্যন্ত আপনার মেমরি ফাঁস হওয়ার বিষয়ে চিন্তা করা উচিত নয়।
এটি হয়ে গেলে, ইনস্ট্রুমেন্টগুলিকে ফায়ার করুন এবং অ্যাপটি ব্যবহার করুন এবং দেখুন মেমরির ফুটো সত্যিই ঘটে কিনা। বেশিরভাগ ক্ষেত্রে আপনি নিজেরাই একটি বস্তু তৈরি করেছেন (সুতরাং আপনি এটির মালিক হন) এবং কাজ শেষ হওয়ার পরে এটি প্রকাশ করতে ভুলে গেছেন।
আপনার কোডটি লেখার সাথে সাথে চেষ্টা করুন এবং এটি অপ্টিমাইজ করবেন না, যখন আপনি আসলে অ্যাপ্লিকেশনটি সাধারণত ব্যবহার করেন তখন আপনার মেমরিটি কী মেমরি ফাঁস হতে পারে বা খুব বেশি সময় নিতে পারে সে সম্পর্কে আপনার অনুমানগুলি প্রায়ই ভুল হয় are
সঠিক কোড চেষ্টা করুন এবং লিখুন যেমন আপনি যদি বরাদ্দ এবং এই জাতীয় ব্যবহার করে কোনও বিষয় তৈরি করেন তবে নিশ্চিত হয়ে নিন যে আপনি এটি সঠিকভাবে প্রকাশ করেছেন release
-retainCount
।