@ আইম্পোর্ট বনাম # ইম্পোর্ট - আইওএস 7


432

আমি ডাব্লুডাব্লুডিসি ভিডিও "আইওএসের প্রয়োগমূলক সংযুক্তি UI বাস্তবায়ন" তে আলোচিত কিছু নতুন আইওএস 7 বৈশিষ্ট্য নিয়ে ঘুরে বেড়াচ্ছি এবং কিছু চিত্রের সাথে প্রভাব ফেলছি। সেশনের উত্স কোডের মধ্যে অস্পষ্ট প্রভাব তৈরি করার জন্য, UIImageএমন একটি বিভাগের মাধ্যমে প্রসারিত করা হয়েছিল যা ইউআইকিটকে এভাবে আমদানি করে:

@import UIKit;

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


উত্তর:


838

এটি মডিউল বা "শব্দার্থক আমদানি" নামে একটি নতুন বৈশিষ্ট্য । সেশন 205 এবং 404 এর জন্য ডাব্লুডাব্লুডিসি 2013 ভিডিওগুলিতে আরও তথ্য রয়েছে । এটি প্রাক-সংকলিত শিরোনামগুলির আরও ভাল বাস্তবায়নের। আপনি আইওএস 7 এবং মাভেরিক্সের যে কোনও সিস্টেম ফ্রেমওয়ার্কের সাথে মডিউল ব্যবহার করতে পারেন। মডিউলগুলি কার্যকরভাবে কার্যকর কাঠামোর একত্রে একটি প্যাকেজিং এবং এটির শিরোনাম এবং এর চেয়ে বেশি নিরাপদ এবং দক্ষ হিসাবে বিবেচিত হয় ।#import

ব্যবহারের @importএকটি বড় সুবিধা হ'ল প্রকল্পের সেটিংসে আপনার কাঠামো যুক্ত করার দরকার নেই, এটি স্বয়ংক্রিয়ভাবে সম্পন্ন হয়েছে । এর অর্থ হল আপনি যে ধাপে প্লাস বোতামটি ক্লিক করেন এবং ফ্রেমওয়ার্ক (সোনার সরঞ্জামবক্স) অনুসন্ধান করতে পারেন, তারপরে এটিকে "ফ্রেমওয়ার্কস" গ্রুপে স্থানান্তরিত করতে পারেন। এটি ক্রিপ্টিক "লিঙ্কার ত্রুটি" বার্তা থেকে অনেক বিকাশকারীকে বাঁচাতে পারে।

আপনার আসলে @importকীওয়ার্ডটি ব্যবহার করার দরকার নেই । যদি আপনি মডিউলগুলি ব্যবহার করতে বেছে নেন, সমস্ত #importএবং #includeনির্দেশাবলী @importস্বয়ংক্রিয়ভাবে ব্যবহারের জন্য ম্যাপ করা হয়। এর অর্থ হ'ল আপনাকে নিজের উত্স কোডটি (বা অন্য কোথাও থেকে ডাউনলোড করা লাইব্রেরির উত্স কোড) পরিবর্তন করতে হবে না। মনে করা হয় মডিউলগুলি ব্যবহারের ফলে বিল্ডের কার্যকারিতাও উন্নত হয়, বিশেষত আপনি যদি পিসিএইচগুলি ভালভাবে ব্যবহার না করে থাকেন বা আপনার প্রকল্পে অনেকগুলি ছোট উত্স ফাইল রয়েছে।

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

উপলব্ধ ফ্রেমওয়ার্কগুলির তালিকা দেখতে আপনি কোড-সমাপ্তি ব্যবহার করতে পারেন:

এখানে চিত্র বর্ণনা লিখুন

এক্সকোড 5-এ নতুন প্রকল্পগুলিতে মডিউলগুলি ডিফল্টরূপে সক্ষম হয় । পুরানো প্রকল্পে এগুলিকে সক্ষম করতে আপনার প্রকল্পের বিল্ড সেটিংসে যান, "মডিউলগুলি" অনুসন্ধান করুন এবং "YES" এ "মডিউল সক্ষম করুন" সেট করুন। "লিঙ্ক ফ্রেমওয়ার্কগুলি" "হ্যাঁ" হওয়া উচিত:

আপনাকে এক্সকোড 5 এবং আইওএস 7 বা ম্যাভেরিক্স এসডিকে ব্যবহার করতে হবে তবে আপনি এখনও পুরানো ওএসগুলির জন্য মুক্তি দিতে পারেন (আইওএস 4.3 বা যাই হোক না কেন) বলুন। মডিউলগুলি কীভাবে আপনার কোড বা সোর্স কোড তৈরি হয় তা পরিবর্তন করে না।


ডাব্লুডাব্লুডিসি স্লাইডগুলি থেকে:

  • কোনও ফ্রেমওয়ার্কের সম্পূর্ণ শব্দার্থক বর্ণনা আমদানি করে
  • শিরোনামগুলি পার্স করার দরকার নেই
  • ফ্রেমওয়ার্কের ইন্টারফেসটি আমদানির আরও ভাল উপায়
  • বাইনারি উপস্থাপনা লোড করে
  • প্রম্পম্পাইল্ড হেডারের চেয়ে আরও নমনীয়
  • স্থানীয় ম্যাক্রো সংজ্ঞা (যেমন #define readonly 0x01) এর প্রভাব প্রতিরোধক
  • ডিফল্টরূপে নতুন প্রকল্পগুলির জন্য সক্ষম

স্পষ্টভাবে মডিউল ব্যবহার করতে:

#import <Cocoa/Cocoa.h>সঙ্গে প্রতিস্থাপন@import Cocoa;

আপনি এই স্বরলিপি দিয়ে কেবল একটি শিরোনাম আমদানি করতে পারেন:

@import iAd.ADBannerView;

এক্সকোডে আপনার জন্য সাবমডিউলগুলি স্বয়ংক্রিয়ভাবে পূর্ণ।


15
@ ডেভিডলং ও ক্লাস: ধন্যবাদ! আমাকে স্বীকার করতে হবে যে আমি মডিউল সম্পর্কে কিছুই জানতাম না যখন আমি প্রথম উত্তরটি দিয়েছিলাম। আমি এটি গিয়ে 404 সেশনটি দেখেছি। ডগ গ্রেগর (এলএলভিএম লোক) যে উপস্থাপনাটি দিয়েছিল তা সত্যিই ভালভাবে সম্পন্ন হয়েছিল। এখানে একটি সি ++ মডিউল কথাও রয়েছে যেখানে এখানে সুবিধাগুলি ব্যাখ্যা করা হয়েছে: youtube.com/watch?v=4Xo9iH5VLQ0
নেভান রাজা

3
@ নেভান - উত্তরের জন্য ধন্যবাদ আমি কেবল যুক্ত করতে চেয়েছিলাম যে মডিউলগুলি বর্তমানে তৃতীয় পক্ষ এবং আপনার নিজস্ব ফ্রেমওয়ার্কগুলিকে সমর্থন করে না।
জামদানি

আপনি কি এটি নিজের ক্লাসের জন্য ব্যবহার করতে পারেন?
সিফিশার

5
আমি মনে করি যদি উপযুক্ত মডিউল.ম্যাপ সরবরাহ করা থাকে তবে আপনার @ তৃতীয় পক্ষের ফ্রেমওয়ার্কগুলি সক্ষম করতে হবে। এলএলভিএম ঝনঝন মডিউল ডকুমেন্টেশন: clang.llvm.org/docs/Modules.html#module-map-language
bames53

1
ওহ, আসলে এটি @import sqlite3আমার জন্য কাজ করার মতো দেখাচ্ছে কারণ আমি এটির জন্য আমার নিজস্ব মডিউল তৈরি করেছি ma
bames53

46

উদ্দেশ্য উত্তর- আপনি লার্নিং কোকো বইটি জানতে পারেন (আইএসবিএন: 978-1-491-90139-7)

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

#import "someFile.h"

বা ফ্রেমওয়ার্কের ক্ষেত্রে:

#import <SomeLibrary/SomeFile.h>

যেহেতু অবজেক্টিভ-সি হ'ল সি প্রোগ্রামিং ভাষার একটি সুপারস্টেট, সি-এর #includeবক্তব্যটির পরে # ইম্পোর্ট স্টেট মেন্ট একটি সামান্য পরিশোধন । # অন্তর্ভুক্ত বিবৃতি খুব সহজ; এটি সংকলনের সময় অন্তর্ভুক্ত করা ফাইলটিতে এটি খুঁজে পাওয়া সমস্ত কিছু অনুলিপি করে। এটি কখনও কখনও উল্লেখযোগ্য সমস্যা তৈরি করতে পারে। উদাহরণস্বরূপ, কল্পনা করুন যে আপনার দুটি হেডার ফাইল রয়েছে: SomeFileA.hএবং SomeFileB.h; SomeFileA.hঅন্তর্ভুক্ত SomeFileB.h, এবং SomeFileB.hঅন্তর্ভুক্ত SomeFileA.h। এটি একটি লুপ তৈরি করে এবং কোম্পেলারকে বিভ্রান্ত করতে পারে। এটি মোকাবেলা করতে, সি প্রোগ্রামারদের এই ধরণের ঘটনা ঘটাতে থেকে রক্ষা করতে হবে।

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

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

কাঠামো আমদানির আগের উদাহরণটিতে ফিরে আসা:

#import <SomeLibrary/SomeFile.h>

এই লাইব্রেরিটিকে মডিউল হিসাবে আমদানি করতে কোডটি এতে পরিবর্তন করা হবে:

@import SomeLibrary;

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

@import AwesomeLibrary.AwesomeObject;

এক্সকোড 5 এ তৈরি সমস্ত নতুন প্রকল্পের জন্য, মডিউলগুলি ডিফল্টরূপে সক্ষম হয়। আপনি যদি পুরানো প্রকল্পগুলিতে মডিউল ব্যবহার করতে চান (এবং আপনার সত্যিকারের উচিত) তাদের প্রকল্পের বিল্ড সেটিংসে সক্ষম করতে হবে। একবার আপনি এটি করেন, আপনি কোনও উদ্বেগ ছাড়াই আপনার কোডে উভয় #importএবং @importবিবৃতি একসাথে ব্যবহার করতে পারেন ।


আমার প্রকল্পে (এক্সকোড 6) কোনও বিকল্প নেই যা আমি মডিউলগুলি সক্ষম করার জন্য প্রথম Xcode 4 এ শুরু করেছি। আমি কি এটি কোনওভাবে ম্যানুয়ালি যুক্ত করতে পারি?
দুর্দান্ত-ও

বিল্ড টার্গেটটি হ'ল আইওএস 6, আমি মনে করি এটিই সমস্যা
আশ্চর্যজনক-

4

এটি বর্তমানে কেবল সিস্টেমের ফ্রেমওয়ার্কগুলিতে নির্মিত জন্য কাজ করে। আপনি যদি #importঅ্যাপলের মতো ব্যবহার করেন তবে এখনও UIKitঅ্যাপের প্রতিনিধিটির কাঠামোটি আমদানি করে এটি প্রতিস্থাপন করা হয় (যদি মডিউলগুলি চালু থাকে এবং এটি সিস্টেম ফ্রেমওয়ার্ক হিসাবে স্বীকৃত হয়) এবং সংকলক এটি মডিউল আমদানি হিসাবে পুনর্নির্মাণ করবে না যাইহোক হেডার ফাইলগুলির আমদানি নয় । সুতরাং উইন্ডোজটি ছেড়ে যাওয়া #importঠিক যেখানেই সম্ভব যেখানেই সম্ভব এটির মডিউল আমদানিতে রূপান্তরিত হবে


2

দেখে মনে হচ্ছে XCode 7.xa যেহেতু ঝনঝন মডিউলটি সক্ষম করার সময় প্রচুর সতর্কতা প্রকাশিত হচ্ছে CLANG_ENABLE_MODULES

তৃতীয় পক্ষের লাইব্রেরি সহ এক্সকোড 7 দিয়ে তৈরি করার সময় প্রচুর সতর্কতা দেখুন


হ্যাঁ আমারও এই সমস্যাটি রয়েছে, তবে এটিতে কোনও সেট করা সমস্ত সতর্কতা সরিয়ে দেয়। আমি যখন এটি করব তখন কি কোনও পার্শ্ব প্রতিক্রিয়া হবে ??
সত্যেশ্বরন

1

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


0

ইতিহাস:

#include => #import => .pch => @import

# অন্তর্ভুক্ত বনাম #
আম্পর্ট

মডিউল - @import

Product Name == Product Module Name 

@moduleঘোষণাপত্রটি কাঠামোর একটি পূর্বনির্ধারিত বাইনারি লোড করতে সংকলককে বলে যা একটি বিল্ডিংয়ের সময় হ্রাস করে । মডিউলার ফ্রেমওয়ার্কে .modulemap[সম্পর্কে]

যদি এক্সকোড প্রকল্পে মডিউল বৈশিষ্ট্য সক্ষম করা থাকে #includeএবং #importদিকনির্দেশগুলি স্বয়ংক্রিয়ভাবে রূপান্তরিত হয় @importযা সমস্ত সুবিধা নিয়ে আসে

এখানে চিত্র বর্ণনা লিখুন

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