আইডির অর্থ কী?


97

আমি অবজেক্টিভ-সি শিখতে চেষ্টা করছি (এবং চেষ্টা করছি):

-(id) init;

এবং আমি বুঝতে পারি idএকটি উদ্দেশ্য সি ভাষার কীওয়ার্ড, তবে "সংকলকটি নির্দিষ্টভাবে idপয়েন্টার ধরণের রূপান্তর নিয়মের সাথে আচরণ করে" বলতে কী বোঝায় ?

না idস্বয়ংক্রিয়ভাবে একটি পয়েন্টার হিসেবে তার ডান দিকে বস্তুর নামকরণ?


28
এটা অহং এর বিপরীত। এমন কিছু লোকের জন্যvoid*
হট লিক্স

এখানে প্রশ্নের সাথে সম্পর্কিত আলোচনা রয়েছে: এসও প্রশ্ন
দিমিত্রি

উত্তর:


122

idযে কোনও ধরণের পয়েন্টার তবে void *এটি সর্বদা একটি উদ্দেশ্য-সি অবজেক্টকে নির্দেশ করে। উদাহরণস্বরূপ, আপনি idকোনও এনএসআর্রে টাইপের যে কোনও কিছু যুক্ত করতে পারেন তবে সেই বিষয়গুলিকে অবশ্যই সাড়া দিতে হবে retainএবং release

সংকলক আপনাকে সুস্পষ্টভাবে যে কোনও বস্তুতে idকাস্ট idকরতে এবং আপনার কোনও বস্তুতে কাস্ট করার জন্য পুরোপুরি খুশি । এটি অবজেক্টিভ-সি-তে অন্য কোনও অন্তর্নিহিত কাস্টিংয়ের বিপরীতে এবং কোকোতে বেশিরভাগ ধারক প্রকারের ভিত্তি।


11
পরিপূরক: id এর সংজ্ঞা typedef struct objc_object *id;, সুতরাং এটি কোনও Objcবস্তুর দিকে নির্দেশ করে।
zhongwuzw

এটা কি হিসাবে একই NSObject? এর অর্থ, আমি যখন এটির ফেরত দেই তখন কি তার idসাথে প্রতিস্থাপন করতে পারি NSObject?
থান্ডারওয়্যারিং


33

idযেকোন অবজেক্টিভ-সি অবজেক্ট ( objc_object) এর পয়েন্টার । এটি কেবল একটি অকার্যকর পয়েন্টার নয় এবং আপনার এটির মতো আচরণ করা উচিত নয়। এটি একটি অবজেক্টের উল্লেখ করে যার বৈধ isaপয়েন্টার থাকা উচিত । যে মানগুলিতে সংরক্ষণ করা যেতে পারে idসেগুলি কেবলমাত্র NSObjectতার মধ্যে এবং তার বংশধরদের মধ্যেও সীমাবদ্ধ নয় যা NSObjectপ্রোটোকলের অস্তিত্বের পাশাপাশি NSProxyবর্গের যে অংশটি এমনকি উত্তরাধিকার সূত্রেও আসে না তা অনুধাবন করতে শুরু করে NSObject। সংকলকটি আপনাকে idকোনও বস্তুর প্রকারের সাথে রেফারেন্সযুক্ত কোনও উপাদান নির্ধারণ করতে id, কোনও বস্তুর প্রকারকে বরাদ্দ করার পাশাপাশি সতর্কতা ছাড়াই কোনও বার্তা (যে সংকলকটি দেখেছেন) প্রেরণ করতে অনুমতি দেবে।


25

idএকটি জেনেরিক টাইপ। এর অর্থ হ'ল সংকলকটি সেখানে কোনও বস্তুর প্রকারের আশা করবে এবং বিধিনিষেধ প্রয়োগ করবে না। আপনি যদি সেখানে এক শ্রেণির বেশি অবজেক্ট ব্যবহার করার প্রত্যাশা করেন তবে এটি কার্যকর হতে পারে; এরপরে আপনি কোন শ্রেণিটি তা খুঁজে বের করার জন্য অন্তর্গঠন ব্যবহার করতে পারেন। idঅবজেক্ট-সি-তে সমস্ত বস্তু পয়েন্টার / রেফারেন্স হিসাবে পাস হওয়ার সাথে সাথে স্বয়ংক্রিয়ভাবে একটি পয়েন্টার ধরে নেয়।

কিছু অতিরিক্ত সংস্থান:
আইডি বনাম এনএসবজেক্ট বনাম আইডি *
উদ্দেশ্যমূলক-সি প্রোগ্রামিং ( উইকিউইবুকস )
ইন্ট্রোস্পেকশন
ডায়নামিক টাইপিং


9
  • আইডি হ'ল ডেটা টাইপ অবজেক্ট আইডেন্টিফায়ার্স অবজেক্টিভ-সি, যা কোনও ধরণের অবজেক্টের জন্য ব্যবহার করা যেতে পারে তা শ্রেণি যাই হোক না কেন। আইডি হ'ল সমস্ত বস্তুর চূড়ান্ত সুপার টাইপ।

জাভা বা সি # তে আমরা এটি ব্যবহার করি

 Object data = someValue;


 String name =(Object)data;

কিন্তু উদ্দেশ্য গ

id data= someValue;



NSString *name= data;

5

হ্যা এবং না. এটি সত্য যে id xএক্সকে পয়েন্টার হিসাবে মনোনীত করে, কিন্তু পয়েন্টার ধরণের রূপান্তর নিয়ম প্রয়োগ করা ভুল বলা যায়, কারণ "আইডি" এর বিশেষ ধরণের রূপান্তর নিয়ম রয়েছে। উদাহরণস্বরূপ, একটি void *পয়েন্টার দিয়ে আপনি এটি করতে পারবেন না:

void *x;
char *y = x; // error, this needs an explicit cast

বিপরীতে, আইডি দিয়ে এটি সম্ভব:

id x;
NSString *y = x;

উদ্দেশ্যমূলক সি উদাহরণগুলিতে আইডি প্রকারের আরও ব্যবহার দেখুন ।

"আধুনিক" উদ্দেশ্য সি ছাড়াও instancetype"আইডি" পরিবর্তে "ডিআইডি" পদ্ধতিতে ব্যবহার করা পছন্দ করা হয় to এটি পরিবর্তন করার জন্য এক্সকোডে একটি স্বয়ংক্রিয় রূপান্তর সরঞ্জামও রয়েছে। উদাহরণস্বরূপ পড়ুন: আইডির পরিবর্তে উদাহরণস্বরূপ ব্যবহার করা কি উপকারী হবে?

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.