উত্তর:
id object = [[NSClassFromString(@"NameofClass") alloc] init];
NSClassFromString()শ্রেণীর নাম ভুল টাইপ করা বা অন্যথায় অস্তিত্ব নেই এমন একটি ক্লাস ব্যবহার করার ঝুঁকি চালায়। আপনি যদি ত্রুটিটি করেন তবে রানটাইম পর্যন্ত আপনি খুঁজে পাবেন না। পরিবর্তে, আপনি যদি Classভেরিয়েবলটি তৈরি করতে অন্তর্নির্মিত উদ্দেশ্য-সি ধরণের ব্যবহার করেন তবে সংকলকটি শ্রেণীর উপস্থিতি যাচাই করবে।
উদাহরণস্বরূপ, আপনার .h:
@property Class NameOfClass;
এবং তারপরে আপনার .m:
id object = [[NameOfClass alloc] init];
আপনি যদি শ্রেণীর নামটি ভুল টাইপ করেন বা এটি উপস্থিত না থাকে তবে আপনি সংকলনের সময় একটি ত্রুটি পাবেন। এছাড়াও আমি এই ক্লিনার কোড মনে করি।
তোমাকে ছাড়া উদ্দেশ্য সি সঙ্গে কাজ করেন, তাহলে NeXTstep( OS X, iOS, GNUstepইত্যাদি) সিস্টেম বা আপনি কি চিন্তা করেন এই পদ্ধতি ক্লিনার, তাহলে আপনি কাজে লাগাতে পারে উদ্দেশ্য সি ভাষা রানটাইম লাইব্রেরির এপিআই । অধীনে Objective-C 2.0:
#import <objc/runtime.h>
//Declaration in the above named file
id objc_getClass(const char* name);
//Usage
id c = objc_getClass("Object");
[ [ c alloc ] free ];
অবজেক্টিভ-সি (১.০ বা নামবিহীন সংস্করণ) এর অধীনে আপনি নিম্নলিখিতগুলি ব্যবহার করবেন:
#import <objc/objc-api.h>
//Declaration within the above named file
Class objc_get_class( const char* name);
//Usage
Class cls = objc_get_class( "Test" );
id obj = class_create_instance( cls );
[ obj free ];
আমি 1.0সংস্করণটি পরীক্ষা করিনি, তবে আমি এখন কোডটিতে এই 2.0ফাংশনটি ব্যবহার করেছি that আমি নিজে বিশ্বাস করি ব্যবহার 2.0কার্যকারিতা উপলব্ধ ক্লিনার যদি এন ফাংশন চেয়ে হিসাবে এটি কম পরিমাণ হ্রাস করা: the length of the name in bytes + 1 ( null terminator )বনাম 2.0 API- এর জন্য the sum of two pointers (isa, cstring), একটি size_t length (cstring_length), এবং length of the string in bytes + 1জন্য NeXTSTEPAPI- টি।