উত্তর:
এনএসএসস্ট্রিং এবং সিএফএস স্ট্রিংআরফ হ'ল "টোল ফ্রি ব্রিজড", যার অর্থ আপনি কেবল তাদের মধ্যে টাইপকাস্ট করতে পারেন।
উদাহরণ স্বরূপ:
CFStringRef aCFString = (CFStringRef)aNSString;
নিখুঁত এবং স্বচ্ছভাবে কাজ করে। অনুরূপভাবে:
NSString *aNSString = (NSString *)aCFString;
আগের বাক্য গঠনটি এমআরসি-র জন্য ছিল। আপনি যদি আরসি ব্যবহার করছেন তবে নতুন ingালাই সিনট্যাক্সটি নিম্নরূপ:
NSString *aNSString = (__bridge NSString *)aCFString;
পাশাপাশি কাজ করে। মুখ্য বিষয়টি হ'ল কোরফাউন্ডেশন প্রায়শই +1 রেফারেন্স গণনা সহ বস্তুগুলিকে ফিরিয়ে দেয়, যার অর্থ তাদের মুক্তি দিতে হবে (সমস্ত সিএফ [টাইপ] ফর্ম্যাট ফাংশনগুলি এটি করে)।
সুন্দর জিনিস হ'ল কোকোতে আপনি নিরাপদে অটোরিলেজ ব্যবহার করতে পারেন বা এগুলি মুক্ত করতে মুক্তি দিতে পারেন।
আপনি যদি ম্যাক ওএস এক্স / অবজেক্টিভ সি এর সাম্প্রতিক সংস্করণগুলিতে এআরসি ব্যবহার করে থাকেন তবে এটি আসল সহজ:
NSString *happyString = (NSString *)CFBridgingRelease(sadString);
যাইহোক, আপনি এনএসএসটিং-এ টোল ফ্রি ব্রিজ সিএফএসস্ট্রিংয়ের চেষ্টা করতে এবং সিএফবিডিজারিং রিলেজ () এ স্বয়ংক্রিয়ভাবে মোড়ানোর প্রস্তাব দিলে এক্সকোড আপনাকে আনন্দের সাথে সতর্ক করবে, আপনি যদি বিকল্পটি ক্লিক করেন তবে আপনি এটি স্বয়ংক্রিয়ভাবে মোড়কে sertোকাতে পারবেন।
(__bridge NSString *)
যথেষ্ট: রক্ষণাবেক্ষণ গণনাটি বাড়ানোর কোনও অর্থ নেই CFBridgingRelease()
।
এগুলি সমতুল্য, সুতরাং আপনি কেবল সিএফএস স্ট্রিংআরফ কাস্ট করতে পারেন:
NSString *aNSString = (NSString*)aCFString;
আরও তথ্যের জন্য, টোল-ফ্রি ব্রিজড প্রকারগুলি দেখুন ।
প্রকৃতপক্ষে, আপনার সাধারণ কোরে ফাউন্ডেশন অবজেক্টগুলিতে কোকো ধরে রাখা, প্রকাশ করা, স্বতঃসংশোধন করা উচিত নয়। যদি আপনি আবর্জনা সংগ্রহ (কেবলমাত্র ম্যাক ওএস এক্সে আপাতত ব্যবহার করছেন) ব্যবহার করেন তবে সেগুলি বজায় রাখে, ছেড়ে দেবে, অটোরেলেজ কলগুলি সবই নো-আপস। সুতরাং স্মৃতি ফাঁস।
অ্যাপল থেকে http://developer.apple.com/mac/library/docamentation/ কোকোয়া / কনসেপ্টুয়াল / গার্বেজ সংগ্রহ / আর্টিকেলস / জিসি কোর ফাউন্ডেশন এইচটিএমএল :
কোর ফাউন্ডেশন এবং কোকো-যেখানে রক্ষণাবেক্ষণ, প্রকাশ, এবং অটোরিলেজ কোনও বিকল্প নেই তার মধ্যে অসম্পূর্ণতার প্রশংসা করা গুরুত্বপূর্ণ। উদাহরণস্বরূপ, যদি আপনি কোনও সিএফসিরেটকে সামঞ্জস্য করেছেন ... রিলিজ বা অটোরিলেসের সাথে, আপনি আবর্জনা সংগৃহীত পরিবেশে এই জিনিসটি ফাঁস করবেন:
NSString *myString = (NSString *)CFStringCreate...(...);
// do interesting things with myString...
[myString release]; // leaked in a garbage collected environment
বিপরীতে, সিএফআলিজ ব্যবহার করে আপনি ইতিমধ্যে ধরে রাখা ব্যবহার করে ধরে রেখেছেন এমন একটি বিষয় প্রকাশ করার জন্য একটি রেফারেন্স গণনা আন্ডারফ্লো ত্রুটির ফলস্বরূপ।
পিএস: পিটার হোসেয়ের উত্তর সম্পর্কে মন্তব্য করতে পারে বলে মনে হচ্ছে না - আমার নিজের অযথা যুক্ত করার জন্য দুঃখিত।
আমি যুক্ত করব যে আপনি কেবল টাইপ-কাস্ট দিয়ে সিএসএসস্ট্রিং থেকে এনএসএসস্ট্রিং যেতে পারবেন না, তবে এটি অন্যভাবে কাজ করে। আপনি CFStringCreateWithCString
বার্তাটি ড্রপ করতে পারেন , এটি আপনাকে পরে প্রকাশ করতে হবে এমন একটি কম জিনিস। (সিএফ Create
যেখানে কোকো ব্যবহার করে সেখানে ব্যবহার করে alloc
, সুতরাং যে কোনও উপায়েই আপনাকে এটি ছেড়ে দেওয়ার দরকার পড়ে))
ফলাফল কোড:
NSString *escapedString;
NSString *unescapedString = [(NSString *) CFXMLCreateStringByUnescapingEntities(NULL, (CFStringRef) escapedString, NULL) autorelease];
আপনি ব্যবহার করতে পারেন: সিএফএস স্ট্রিংআরফ আইডিসি সহ
NSString *sId = [NSString stringWithFormat:@"%@", (NSString*)idc];