উত্তর:
nil
শুধুমাত্র একটি স্থানে ব্যবহার করা উচিত id
, আমরা কি জাভা এবং সি ++ প্রোগ্রামারদের একটি অবজেক্ট একটি পয়েন্টার হিসাবে মনে হবে। ব্যবহারNULL
অ-অবজেক্ট পয়েন্টারগুলির জন্য ।
এই পদ্ধতির ঘোষণাটি দেখুন:
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object
change:(NSDictionary *)change context:(void *)context
প্রসঙ্গটি হ'ল একটি void *
(যেমন একটি সি-স্টাইল পয়েন্টার), সুতরাং আপনি অবশ্যই NULL
(যা টাইপযুক্ত (void *)0
) এর পরিবর্তে nil
(যা কখনও কখনও হিসাবে ঘোষিত হয় ) ব্যবহার করবেন id
।
context
মধ্যে observeValueForKeyPath:ofObject:change:context:
হয় void *
, না মানে ডাটা হিসাবে পাস যে context
একটি বস্তু পয়েন্টার হতে পারে? আমি মনে করি এটি একটি সাধারণ ঘটনা হবে। এজন্য আমি কেন বিভ্রান্ত হয়ে পড়েছি যে ডক্স সর্বদা এর NULL
পরিবর্তে ব্যবহার করে nil
।
তারা প্রযুক্তিগতভাবে একই জিনিস (0), তবে শূন্যস্থানটি সাধারণত একটি উদ্দেশ্য-সি অবজেক্ট টাইপের জন্য ব্যবহৃত হয়, যখন সিউল-স্টাইল পয়েন্টার (অকার্যকর *) জন্য NUL ব্যবহৃত হয়।
তারা প্রযুক্তিগতভাবে একই জিনিস এবং শুধুমাত্র শৈলীতে পৃথক:
nil
হ'ল টাইপটির জন্য কী ব্যবহার করতে হবে id
(এবং বস্তুর দিকে নির্দেশক)।NULL
এটি আপনি ব্যবহার করেন void *
।0
।আমি সাধারণত সেই রূপটি ব্যবহার করি যা ভাষার সাথে মেলে যেখানে প্রকারটি ঘোষিত হয়েছে ।
NULL
হয় C equivalent
এরnil
, কোনও ইঙ্গিতকারী;
কোথায় nil is zero typed as id
,
NULL is zero typed as void*
।
একটি গুরুত্বপূর্ণ বিষয় আপনি NULL তে কোনও বার্তা প্রেরণ করতে পারবেন না। সুতরাং অনেক জায়গায় উদ্দেশ্য-সিতে শূন্যতা ব্যবহার করা পছন্দ করা হয়।
তারা প্রায় একই জিনিস বাদে,
nil
একটি উদ্দেশ্য-সি স্টাইলে ব্যবহৃত হয়। NULL
সি টাইপ পয়েন্টারগুলির জন্য কোথায় এবং এটিতে টাইপফাইড হয় (void *)
।