উদ্দেশ্য-সি-তে `ওয়ানওয়ে অকার্যকর Use এর ব্যবহারের কেস?


107

আমি NSObject.h এ একটি অদ্ভুত কীওয়ার্ড পেয়েছি

- (oneway void)release;

আমি ওয়েবটি অনুসন্ধান করেছি এবং শিখেছি এটি অ্যাসিক্রোনাস বার্তা প্রেরণের সাথে সম্পর্কিত, যা এরলংয়ের বার্তা প্রবাহের সাথে অনুরূপ।

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


5
স্মরণে রাখা সহজ: oneway voidমৃত্যুর জন্য এই ক্ষেত্রে আমরা কখনও কখনও কোডিংয়ে দেখি those এমন সুন্দর দুর্ঘটনা রূপকগুলির মধ্যে একটি। "অন্যদিকে কিছু থাকলে আমাদের বলবেন না।"
বিল্ডসুসাইড হয়েছে

উত্তর:


110

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

বিতরণ করা সামগ্রীর উপর আরও তথ্যের জন্য কোকো কনসেপ্টুয়াল ডিস্ট্রোবজেক্টস দেখুন


6
লিঙ্কটি আর কাজ করবে বলে মনে হচ্ছে না। আমি এটি অ্যাপলের ডক্সের মধ্যে খুঁজে পাইনি তবে আমি পেয়েছি: chachatelier.fr/programration/fichiers/cpp-objc-en.pdf যা "ওয়ানওয়ে" কীওয়ার্ডটির একটি ভাল ব্যাখ্যা সরবরাহ করে। বিভাগ 4.4.5 (পিডিএফ পৃষ্ঠা 24) দেখুন
jlmendezbonini

@ রবিন আপডেটের জন্য ধন্যবাদ। এটি গত কয়েক মাস ধরে চলে গেছে, তবে আমি অ্যাপল থেকে অন্য একটি রেফারেন্স খুঁজে পাইনি তাই আমি এটি ছেড়ে দিয়েছি।
ughoavgfhw

এবং আমি ভেবেছিলাম নেটওয়ার্কের কাজগুলিকে চালিত করার একমাত্র উপায় হ'ল এগুলিকে সাব থ্রেড করা ... gcd_async এবং এর বন্ধুদের ব্যবহার করে ..
নীরভ ভট্ট

18

অ্যাপলের ডকুমেন্টেশন অনুসারে ওয়ানও কেবলমাত্র বিতরণ করা অবজেক্টের জন্য ব্যবহৃত হয় (এবং মাল্টিথ্রেডিংয়ের জন্য নয়)।

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

রিলিজ পদ্ধতির কোনও রিটার্নের মান নেই এবং তাই কল করুন এটি অ্যাসিঙ্ক্রোনসিভভাবে কার্যকর করা যেতে পারে। বিপরীতে, ধরে রাখুন এবং অটোরিলেজ একটি আইডি ফেরত দিন এবং তাই আমাদের পুরো নেটওয়ার্ক জুড়ে ফিরতি বার্তা স্থানান্তরিত হওয়ার জন্য অপেক্ষা করতে হবে।


আমার একটি সম্পর্কিত প্রশ্ন রয়েছে: onewayকীওয়ার্ডটি ব্যবহারের ফলে যদি বার্তাটি কলিং থ্রেডটি ব্লক না করে যখন ডাকা পদ্ধতিটি কার্যকর হয়, তখন এটি দ্বিতীয় পদ্ধতিতে কল করা পদ্ধতিটি কার্যকর করে তোলে। এটি কি মাল্টিটাস্কিং নয় (এর সর্বাধিক আকারে)? আমি কি এই ছোট ছোট ক্রিয়াকলাপগুলিকে অন্য থ্রেডে দ্রুত (খুব বেশি প্রচেষ্টা ছাড়াই) বিচ্ছিন্ন করতে ব্যবহার করতে পারি ? আপনাকে অনেক ধন্যবাদ.
কনস্টান্টিনো জারোহাস

1
না, আপনি পারবেন না। বিতরণ করার সময় থ্রেডটি একটি ভিন্ন মেশিন / প্রক্রিয়াতে চালিত হয়। আপনি নিজের ব্যবহারের জন্য সঞ্চালনকারী নির্বাচন করতে পারেন: অনট্রেড: উইড অবজেক্ট: ওয়েটউন্টিলডোন: আপনার উদ্দেশ্যে।
ফ্রিম্যান

2
তাহলে কি হয় - (oneway void) releaseতারপর? এটি অন্য কোনও মেশিন বা প্রক্রিয়াতে নেই।
কনস্টান্টিনো জারোহাস

সঠিকভাবে একটি উপায় সম্পর্কে সঠিকভাবে ব্যাখ্যা করার জন্য +1 -> one wayকোনও পদ্ধতির সংজ্ঞা দেওয়া মানে don't wait for the method to complete and return anything. block it if there is any n/w trafic or so. কি আমি বোধ করি?
থিমস্মার্গাইন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.