উদ্দেশ্য-সি তে শূন্য বার্তা প্রেরণ


107

জাভা ডেভেলপার হিসাবে যিনি অ্যাপলের উদ্দেশ্য-সি 2.0 ডকুমেন্টেশন পড়ছেন: আমি অবাক হয়েছি " নীলকে একটি বার্তা প্রেরণ " এর অর্থ - এটি কীভাবে কার্যকর তা একাকী ছেড়ে দিন। ডকুমেন্টেশন থেকে একটি অংশ নেওয়া:

কোকোতে বেশ কয়েকটি নিদর্শন রয়েছে যা এই সত্যটির সদ্ব্যবহার করে। কোনও বার্তা থেকে শূন্যে ফিরে আসা মানটিও বৈধ হতে পারে:

  • যদি পদ্ধতিটি কোনও অবজেক্ট, কোনও পয়েন্টার প্রকার, আকারের চেয়ে কম বা সমান আকারের কোনও পূর্ণসংখ্যাকার স্কেলার, শূন্যস্থান, একটি ডাবল, দীর্ঘ ডাবল বা দীর্ঘ দীর্ঘ হয় তবে শূন্যপদে প্রেরিত একটি বার্তা 0 প্রদান করে ।
  • যদি পদ্ধতিটি কোনও কাঠামো ফেরত দেয়, যেমন ম্যাক ওএস এক্স এবিআই ফাংশন কল গাইড দ্বারা নিবন্ধিত করে ফেরত পাঠানো হয়, তবে নীলকে প্রেরিত একটি বার্তা ডেটা কাঠামোর প্রতিটি ক্ষেত্রের জন্য ০.০ প্রদান করে। অন্যান্য স্ট্রাক্ট ডেটা ধরণের শূন্যগুলি পূরণ করা হবে না।
  • পদ্ধতিটি যদি পূর্বোক্ত মান ধরণের ব্যতীত অন্য কোনও কিছু প্রদান করে তবে শূন্যতার সাথে প্রেরিত বার্তার ফেরতের মান অপরিজ্ঞাত হয়।

জাভা কি আমার মস্তিষ্ককে উপরের ব্যাখ্যাটি কুঁচকে অক্ষম করেছে? বা এমন কিছু আছে যা আমি মিস করছি যা এটিকে কাচের মতো পরিষ্কার করে দেবে?

আমি উদ্দেশ্য-সি-তে বার্তা / রিসিভারের ধারণা পেয়েছি, যা ঘটেছিল তা নিয়ে আমি কেবল বিভ্রান্ত হয়ে পড়েছি nil


2
আমার একটি জাভা ব্যাকগ্রাউন্ডও ছিল এবং শুরুতে আমি এই দুর্দান্ত বৈশিষ্ট্যটি দেখে ভীত হই, তবে এখন আমি একেবারে ভালবাসি!
ভ্যালেন্টাইন রাদু

1
ধন্যবাদ, এটি একটি দুর্দান্ত প্রশ্ন। আপনি কি এর সুবিধাগুলি দেখেছেন? এটি আমাকে "বাগ নয়, একটি বৈশিষ্ট্য" জিনিস হিসাবে আঘাত করেছে। আমি বাগগুলি পেতে থাকি যেখানে জাভা আমাকে কেবল ব্যতিক্রম সহ চড় মারে, তাই সমস্যাটি কোথায় তা আমি জানতাম। আমি এখানে এবং সেখানে তুচ্ছ কোডের একটি লাইন বা দুটি সংরক্ষণ করতে নাল পয়েন্টার ব্যতিক্রমটি বাণিজ্য করতে খুশি নই।
ম্যাকিয়েজ ট্রাইবিও

উত্তর:


92

ঠিক আছে, আমি মনে করি এটি একটি খুব স্বতন্ত্র উদাহরণ ব্যবহার করে বর্ণনা করা যেতে পারে। ধরা যাক জাভাতে আপনার একটি পদ্ধতি রয়েছে যা একটি অ্যারেলিস্টে থাকা সমস্ত উপাদানকে মুদ্রণ করে:

void foo(ArrayList list)
{
    for(int i = 0; i < list.size(); ++i){
        System.out.println(list.get(i).toString());
    }
}

এখন, আপনি যদি সেই পদ্ধতিটি এভাবে কল করেন: someObject.foo (NULL); এই ক্ষেত্রে তালিকার অ্যাক্সেস করার চেষ্টা করার সময় আপনি সম্ভবত একটি নালপয়েন্টার এক্সসেপশন পেতে যাচ্ছেন, এই ক্ষেত্রে কলটিতে list.size (); এখন, আপনি সম্ভবত কখনও ওওবজেক্ট.ফু (NULL) এর মতো নুল মান সহ কল ​​করবেন না। যাইহোক, আপনি এমন পদ্ধতি থেকে আপনার অ্যারেলিস্টটি অর্জন করেছেন যা NUL ফেরত দেয় যদি এটি কিছুঅজেক্ট.ফু (অন্যান্যঅবজেক্ট.জেটআরলিস্ট ()) এর মতো অ্যারেলিস্ট তৈরি করতে কোনও ত্রুটি ঘটায়;

অবশ্যই আপনি যদি এমন কিছু করেন তবে আপনারও সমস্যা হবে:

ArrayList list = NULL;
list.size();

এখন, অবজেক্টিভ-সি তে আমাদের সমতুল্য পদ্ধতি রয়েছে:

- (void)foo:(NSArray*)anArray
{
    int i;
    for(i = 0; i < [anArray count]; ++i){
        NSLog(@"%@", [[anArray objectAtIndex:i] stringValue];
    }
}

এখন, আমাদের যদি নিম্নলিখিত কোডগুলি থাকে:

[someObject foo:nil];

আমাদের একই অবস্থা রয়েছে যেখানে জাভা একটি নালপয়েন্টার এক্সসেপশন তৈরি করবে। নীল বস্তুটি প্রথমে অ্যাক্সেস করা হবে [anArray গণনা] তবে, একটি নালপয়েন্টার এক্সেপশন নিক্ষেপ করার পরিবর্তে, উদ্দেশ্য-সি উপরোক্ত নিয়ম অনুসারে কেবল 0 ফিরে আসবে, সুতরাং লুপটি চলবে না। তবে, আমরা যদি একটি সেট সংখ্যক বার চালানোর জন্য লুপটি সেট করি তবে আমরা প্রথমে [anArray অবজেক্টআটিআইডেক্স: i] এ অ্যারেতে একটি বার্তা প্রেরণ করছি; এটি 0ও ফিরে আসবে, তবে অবজেক্টআটিআইডেক্স: যেহেতু একটি পয়েন্টার দেয় এবং 0 তে একটি পয়েন্টার শূন্য / NULL হয়, এনএসএলগ প্রতিটি সময় লুপের মধ্য দিয়ে পাস হবে। (যদিও এনএসলগ একটি ফাংশন এবং কোনও পদ্ধতি নয়, এটি কোনও শূন্য এনএসএসস্ট্রিং পাস হলে এটি প্রিন্ট করে (নাল)।

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


33
সম্ভবত এটি উল্লেখ করার মতো বিষয় যে এই আচরণটি গত কয়েক দশক ধরে অবজেক্টিভ-সি সম্প্রদায়ের মধ্যে বেশ বিতর্কের বিষয় হয়ে দাঁড়িয়েছে। "সুরক্ষা" এবং "সুবিধার্থে" এর মধ্যে বাণিজ্যটি বিভিন্ন লোকেরা আলাদাভাবে মূল্যায়ন করে।
মার্ক বেসি 19

3
অনুশীলনে শূন্য বার্তাগুলি পাঠানো এবং কীভাবে উদ্দেশ্য-সি কাজ করে বিশেষত এআরসি-র নতুন দুর্বল পয়েন্টার বৈশিষ্ট্যের মধ্যে প্রচুর প্রতিসাম্য রয়েছে। দুর্বল পয়েন্টারগুলি স্বয়ংক্রিয়ভাবে শূন্য হয়। সুতরাং আপনার এপিআই ডিজাইন করুন যাতে এটি 0 / শূন্য / এনআইএল /
এনইউএল

1
আমি মনে করি আপনি myObject->iVarযদি এটি করেন তবে এটি ক্র্যাশ হয়ে যাবে, নির্বিশেষে এটি সিটির সাথে বা অবজেক্ট ছাড়াই । (
গ্রাভেডিগের

3
@ 11684 এটি সঠিক, তবে ->এটি এখন আর একটি উদ্দেশ্য-সি অপারেশন নয় তবে খুব বেশি জেনেরিক সি-ইসম।
বুবুম

1
সাম্প্রতিক ওএসএক্স রুট কাজে লাগান / গোপন ব্যাকডোর API obj-C এর নীল মেসেজিং কারণে সকল ব্যবহারকারীর (শুধুমাত্র প্রশাসক) জন্য প্রবেশযোগ্য।
ডিসকো


41

অন্যান্য পোস্টগুলির সমস্ত সঠিক, তবে সম্ভবত এটি ধারণাটি এখানে গুরুত্বপূর্ণ বিষয় important

অবজেক্টিভ-সি পদ্ধতি কলগুলিতে, কোনও নির্বাচককে গ্রহণ করতে পারে এমন যে কোনও অবজেক্ট রেফারেন্সটি সেই নির্বাচকের জন্য একটি বৈধ লক্ষ্য।

এটি প্রচুর সাশ্রয় করে "এক্স টাইপের টার্গেট অবজেক্ট?" কোড - যতক্ষণ না প্রাপ্তি অবজেক্টটি নির্বাচককে প্রয়োগ করে, এটি কোন শ্রেণীর তা একেবারেই কোনও পার্থক্য করে না ! nilযে কোনো নির্বাচক গ্রহণ একটি NSObject - এটা শুধু নয় কি কিছু। এটি প্রচুর "শূন্যতার জন্য চেক করুন, কোডটি সত্য হলে" বার্তাটি প্রেরণ করবেন না elim ("যদি এটি এটি স্বীকার করে, এটি এটি প্রয়োগ করে" ধারণাটি আপনাকে জাভা ইন্টারফেসের মতো প্রকারের প্রকারের প্রোটোকল তৈরি করার অনুমতি দেয় : এমন একটি ঘোষণা যে কোনও শ্রেণি যদি বর্ণিত পদ্ধতিগুলি প্রয়োগ করে তবে প্রোটোকলের সাথে সঙ্গতি রাখে))

এর কারণ হ'ল বানর কোডটি মুছে ফেলা যা সংকলককে খুশি রাখা ছাড়া কিছুই করে না। হ্যাঁ, আপনি আরও একটি পদ্ধতি কলের ওভারহেড পান তবে আপনি প্রোগ্রামারের সময় সাশ্রয় করেন যা সিপিইউ সময়ের চেয়ে অনেক বেশি ব্যয়বহুল সংস্থান। এছাড়াও, আপনি আপনার অ্যাপ্লিকেশন থেকে আরও কোড এবং আরও শর্তযুক্ত জটিলতা দূর করছেন।

নিম্নগামীদের পক্ষে স্পষ্ট করা: আপনি মনে করতে পারেন যে এটি যাওয়ার পক্ষে ভাল উপায় নয় তবে ভাষাটি কীভাবে প্রয়োগ করা হয়, এবং এটি অবজেক্টিভ-সি-তে প্রস্তাবিত প্রোগ্রামিং আইডিয়ম (স্ট্যানফোর্ড আইফোন প্রোগ্রামিং বক্তৃতাগুলি দেখুন)।


17

এর অর্থ যা হ'ল রানটাইম কোনও ত্রুটি তৈরি করে না যখন নীল পয়েন্টারেজেজেজেজ_এমএসএসএসেন্ড কল করা হয়; পরিবর্তে এটি কিছু (প্রায়শই দরকারী) মান দেয়। পার্শ্ব প্রতিক্রিয়া থাকতে পারে এমন বার্তাগুলি কিছুই করে না।

এটি কার্যকর কারণ বেশিরভাগ ডিফল্ট মানগুলি ত্রুটির চেয়ে বেশি উপযুক্ত। উদাহরণ স্বরূপ:

[someNullNSArrayReference count] => 0

অর্থাত, শূন্য অ্যারে হিসাবে শূন্য উপস্থিত হয়। কোনও শূন্য এনএসভিউ রেফারেন্স লুকিয়ে রাখলে কিছুই হয় না। হ্যান্ডি, এহ?


12

ডকুমেন্টেশন থেকে উদ্ধৃতিতে, দুটি পৃথক ধারণা আছে - সম্ভবত ডকুমেন্টেশনটি আরও পরিষ্কার করে দিলে এটি আরও ভাল হতে পারে:

কোকোতে বেশ কয়েকটি নিদর্শন রয়েছে যা এই সত্যটির সদ্ব্যবহার করে।

কোনও বার্তা থেকে শূন্যে ফিরে আসা মানটিও বৈধ হতে পারে:

পূর্ববর্তীটি এখানে সম্ভবত আরও প্রাসঙ্গিক: সাধারণত কোডটিকে nilআরও সোজা করে বার্তাগুলি প্রেরণ করতে সক্ষম হচ্ছেন - আপনাকে সর্বত্র নাল মানগুলি পরীক্ষা করতে হবে না। প্রচলিত উদাহরণ সম্ভবত অ্যাক্সেসর পদ্ধতি:

- (void)setValue:(MyClass *)newValue {
    if (value != newValue) { 
        [value release];
        value = [newValue retain];
    }
}

যদি এই বার্তাগুলি প্রেরণ nilবৈধ না হয় তবে এই পদ্ধতিটি আরও জটিল হবে - আপনার বার্তা প্রেরণের আগে নিশ্চিত করার জন্য আপনার আরও দুটি অতিরিক্ত চেক থাকতে হবে valueএবং newValueতা নয় nil

পরবর্তী বিন্দু (যে মানাগুলি থেকে ফিরে আসা nilমানগুলিও সাধারণত বৈধ হয়) তবে পূর্বের সাথে একটি গুণক প্রভাব যুক্ত করে। উদাহরণ স্বরূপ:

if ([myArray count] > 0) {
    // do something...
}

এই কোডটির জন্য আবার চেকের দরকার নেই nil মানগুলির , এবং প্রাকৃতিকভাবে প্রবাহিত ...

এই সমস্ত বলেছে যে অতিরিক্ত নমনীয়তা যা মেসেজ পাঠাতে সক্ষম হচ্ছে nilতা কোনও মূল্যে আসে। সম্ভাবনা রয়েছে যে আপনি কোনও পর্যায়ে রাইট কোডটি লিখবেন যা একটি অদ্ভুত উপায়ে ব্যর্থ হয় কারণ আপনি কোনও মান হতে পারে এমন সম্ভাবনাটি অ্যাকাউন্টে নেন নি nil


12

থেকে গ্রেগ পার্কার এর সাইটে :

যদি LLVM সংকলক 3.0 (এক্সকোড 4.2) বা তারপরে চালানো হয়

রিটার্নের প্রকারটি বন্ধ করার বার্তা | প্রত্যাবর্তন
64 বিট পর্যন্ত পূর্ণসংখ্যা | 0
দীর্ঘ ডাবল পর্যন্ত ভাসমান-পয়েন্ট 0.0
পয়েন্টার | শূন্য
স্ট্রাক্টস | {0}
যে কোনও _কম্পলেক্স প্রকার | {0, 0}

9

এর অর্থ হ'ল প্রায়শই সুরক্ষার জন্য সর্বত্র সর্বত্র নিল বস্তুগুলি পরীক্ষা করা উচিত নয় - বিশেষত:

[someVariable release];

বা উল্লিখিত হিসাবে, বিভিন্ন গণনা এবং দৈর্ঘ্যের পদ্ধতিগুলি সমস্ত 0 ফিরে আসে যখন আপনি শূন্য মান পেয়ে যাবেন, সুতরাং আপনাকে শূন্যের জন্য অতিরিক্ত চেক যুক্ত করতে হবে না:

if ( [myString length] > 0 )

অথবা এটা:

return [myArray count]; // say for number of rows in a table

মনে রাখবেন যে মুদ্রার অপর প্রান্তটি "যদি ([মাইস্ট্রিং দৈর্ঘ্য] == 1)"
হ্যাটিফঞ্চ

কিভাবে এটি একটি বাগ? [মাই স্ট্রিংয়ের দৈর্ঘ্য] মাই স্ট্রিং শূন্য হলে শূন্য (শূন্য) ফেরৎ দেয় ... আমার মনে হয় একটি বিষয় হতে পারে [মাইভিউ ফ্রেম] যা আমার মনে হয় যদি আমার ভিউ শূন্য হয় তবে আপনাকে কিছুটা অবাস্তব দিতে পারে।
কেন্ডল হেলস্টেটার জেলনার

আপনি যদি ধারণাটির চারপাশে আপনার ক্লাস এবং পদ্ধতিগুলি ডিজাইন করেন তবে ডিফল্ট মানগুলি (0, শূন্য, কোনও) অর্থ "দরকারী নয়" এটি একটি শক্তিশালী সরঞ্জাম। দৈর্ঘ্য যাচাইয়ের আগে আমাকে কখনই আমার স্ট্রিং পরীক্ষা করতে হবে না। আমার কাছে খালি স্ট্রিংটি যেমন অকেজো এবং যখন আমি পাঠ্য প্রক্রিয়াকরণ করছি তখন শূন্য স্ট্রিং। আমিও একজন জাভা বিকাশকারী এবং আমি জানি জাভা পিউরিস্টরা এটি এড়াতে পারবেন তবে এটি প্রচুর কোডিং সাশ্রয় করে।
জেসন ফুস্টার্নবার্গ

6

"রিসিভার নিল হচ্ছে" সম্পর্কে চিন্তা করবেন না; আমি একমত, যে হয় চমত্কার অদ্ভুত। আপনি যদি শূন্য বার্তা প্রেরণ করেন তবে কোনও গ্রহণকারী নেই। আপনি কিছুতেই একটি বার্তা প্রেরণ করছেন।

এর সাথে কীভাবে মোকাবিলা করতে হবে তা জাভা এবং অবজেক্টিভ-সি এর মধ্যে একটি দার্শনিক পার্থক্য: জাভাতে, এটি একটি ত্রুটি; অবজেক্টিভ-সি-তে, এটি কোনও অপশন নেই।


জাভাতে সেই আচরণের একটি ব্যতিক্রম রয়েছে, আপনি যদি কোনও নালার উপর স্থির ফাংশন কল করেন তবে এটি ভেরিয়েবলের সংকলন টাইম শ্রেণিতে ফাংশনটি কল করার সমতুল্য (এটি নাল হোক না কেন)।
রোমান এ। টেইচার

6

ওবিজেসি বার্তাগুলি যা শূন্য প্রেরণ করা হয় এবং যার রিটার্ন মানগুলি সাইজেরফের চেয়ে বড় আকারের (শূন্য *) থাকে পাওয়ারপিসি প্রসেসরগুলিতে অপরিবর্তিত মান তৈরি করে। এছাড়াও, এই বার্তাগুলির কারণে স্ট্রাক্টগুলির ক্ষেত্রে অপরিবর্তিত মানগুলি ফিরিয়ে আনতে পারে যার আকারও ইন্টেল প্রসেসরের 8 বাইটের চেয়ে বড়। ভিনসেন্ট গ্যাবল তার ব্লগ পোস্টে এটিকে সুন্দরভাবে বর্ণনা করেছেন


6

আমি মনে করি না যে অন্য জবাবগুলির মধ্যে কোনও এটির স্পষ্টভাবে উল্লেখ করেছে: আপনি যদি জাভা ব্যবহার করেন তবে আপনার মনে রাখা উচিত যে ম্যাক ওএস এক্সের উদ্দেশ্য-সি-এর ব্যতিক্রম হ্যান্ডলিং সমর্থন থাকলেও এটি একটি optionচ্ছিক ভাষা বৈশিষ্ট্য যা হতে পারে একটি সংকলক পতাকা সহ চালু / বন্ধ। আমার অনুমান যে "বার্তা প্রেরণ nilনিরাপদ" এই নকশাটি ভাষাতে ব্যতিক্রম হ্যান্ডলিং সমর্থন অন্তর্ভুক্তির পূর্বাভাস দেয় এবং এটি একই লক্ষ্যকে সামনে রেখে করা হয়েছিল: পদ্ধতিগুলি nilত্রুটিগুলি নির্দেশ করতে ফিরে আসতে পারে এবং যেহেতু একটি বার্তা প্রেরণ করেnil সাধারণত ফিরে আসেnilপরিবর্তে, এটি ত্রুটি সূচকটি আপনার কোডের মাধ্যমে প্রচার করতে দেয় যাতে আপনাকে প্রতিটি বার্তায় এটি পরীক্ষা করতে হবে না। আপনার কেবল এটির জন্য প্রয়োজনীয় পয়েন্টগুলিতে এটি পরীক্ষা করতে হবে। আমি ব্যক্তিগতভাবে মনে করি ব্যতিক্রম প্রচার এবং পরিচালনা এই লক্ষ্যটি মোকাবেলার একটি সেরা উপায়, তবে সকলেই এর সাথে একমত হতে পারে না। (অন্য দিকে, আমি উদাহরণস্বরূপ না জাভার প্রয়োজন মত আপনার কি ডিক্লেয়ার করার কি ব্যতিক্রম একটি পদ্ধতি নিক্ষেপ করতে পারে, যা প্রায়ই আপনাকে বাহিনী থাকার উপর না চিহ্নগুলি সিন্টেক্সের আপনার কোড থেকে সঞ্চারিত ব্যতিক্রম ঘোষণা কিন্তু যে অন্য আলোচনা আছে।)

আমি সম্পর্কিত একটি অনুরূপ পোস্ট করেছি, তবে দীর্ঘ, এর সাথে সম্পর্কিত প্রশ্নের উত্তর "" কি দৃser়ভাবে দাবি করা হচ্ছে যে প্রতিটি বস্তু তৈরির উদ্দেশ্য উদ্দেশ্য সিতে প্রয়োজনীয় হয়েছিল? " আপনি যদি আরও বিশদ চান।


আমি যে ভাবে এটি সম্পর্কে চিন্তা না। এটি খুব সুবিধাজনক বৈশিষ্ট্য বলে মনে হচ্ছে।
এম কে 12

2
ভাল অনুমান, তবে কেন সিদ্ধান্ত নেওয়া হয়েছিল তা historতিহাসিকভাবে ভুল urate শুরু থেকেই ভাষায় ব্যতিক্রম হ্যান্ডলিংয়ের অস্তিত্ব ছিল যদিও আধুনিক ব্যতিক্রমগুলির সাথে তুলনা করে মূল ব্যতিক্রম হ্যান্ডলারগুলি বেশ আদিম ছিল। নীল-eats বার্তা একটি সচেতন নকশা পছন্দ থেকে উদ্ভূত ছিল ঐচ্ছিক স্মলটক মধ্যে Nil বস্তুর আচরণ। যখন মূল নেক্সটিএসটিপি এপিআইগুলি ডিজাইন করা হয়েছিল, তখন মেথড চেইনিং বেশ সাধারণ ছিল এবং একটি nilরিটার্ন কোনও শৃঙ্খলা শৃঙ্খলা হিসাবে কোনও এনও-তে ব্যবহৃত হত।
বুবুম

2

সি আদিম মানগুলির জন্য 0 হিসাবে কিছুইকে, এবং পয়েন্টারগুলির জন্য NULL প্রতিনিধিত্ব করে না (যা পয়েন্টার প্রসঙ্গে 0 এর সমান)।

উদ্দেশ্য-সি শূন্যতা যোগ করে কোন কিছুর প্রতিনিধিত্ব করে না। শূন্য কিছুই একটি বস্তু পয়েন্টার। যদিও NULL থেকে শব্দার্থগতভাবে পৃথক, তারা প্রযুক্তিগতভাবে একে অপরের সমতুল্য।

সদ্য-বরাদ্দ হওয়া এনএসওবজেক্টগুলি তাদের বিষয়বস্তুগুলি 0 এ সেট করে জীবন শুরু করে This

শূন্যতার সবচেয়ে উল্লেখযোগ্য আচরণ হ'ল এটিতে এতে বার্তা প্রেরণ করা যেতে পারে।

অন্যান্য ভাষাতে, যেমন সি ++ (বা জাভা), এটি আপনার প্রোগ্রামটি ক্র্যাশ করবে, তবে উদ্দেশ্য-সি-তে শূন্যের জন্য কোনও পদ্ধতি প্রয়োগ করে শূন্যের মান ফিরে আসবে। এটি বহুলাংশে অভিব্যক্তিগুলিকে সহজ করে তোলে, কারণ এটি কোনও কাজ করার আগে শূন্যতার জন্য যাচাই করা প্রয়োজন:

// For example, this expression...
if (name != nil && [name isEqualToString:@"Steve"]) { ... }

// ...can be simplified to:
if ([name isEqualToString:@"Steve"]) { ... }

ওজেক্টিভ-সি-তে কীভাবে শূন্য কাজ করে তা সম্পর্কে সচেতন হওয়া আপনার সুবিধার্থে এই অ্যাপ্লিকেশনটিতে কোনও ত্রুটিপূর্ণ ত্রুটি নয় বরং এই সুবিধাকে একটি বৈশিষ্ট্য হিসাবে অনুমোদিত করে। নীল মানগুলি অযাচিত হয় এমন মামলার বিরুদ্ধে সতর্কতা অবলম্বন করে তা নিশ্চিত করে পরীক্ষা করুন এবং নিঃশব্দে ব্যর্থ হওয়ার জন্য তাড়াতাড়ি ফিরে আসুন, বা একটি ব্যতিক্রম ছুঁড়ে দেওয়ার জন্য একটি এনএসপিআরমিটারসেটর যুক্ত করুন।

সূত্র: http://nshipster.com/nil/ https://developer.apple.com/library/ios/#docamentation/cocoa/conceptual/objectivec/Chapters/ocObjectsClasses.html (শূন্য বার্তা প্রেরণ)।

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