উদ্দেশ্য-সি-তে কোনও শ্রেণীর জন্য ব্যক্তিগত পদ্ধতিগুলি নির্ধারণ করার সর্বোত্তম উপায়


355

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

আমি বুঝতে পারি যে এখানে বেশ কয়েকটি সম্মেলন এবং অভ্যাস থাকতে পারে এবং উদ্দেশ্যটি-সি-তে ব্যক্তিগত পদ্ধতিগুলি ব্যবহার করার সর্বোত্তম কৌশলগুলির লোকগ্রাহক হিসাবে এই প্রশ্নটি সম্পর্কে ভাবেন।

আপনার পদ্ধতির জন্য এটি পোস্ট করার সময় একটি যুক্তি অন্তর্ভুক্ত করুন। কেন ভাল? এতে কোন ত্রুটি রয়েছে (যে আপনি জানেন) এবং আপনি তাদের সাথে কীভাবে আচরণ করেন?


এখনও পর্যন্ত আমার অনুসন্ধান হিসাবে।

গোষ্ঠী ব্যক্তিগত পদ্ধতিতে MyClass.m ফাইলে সংজ্ঞায়িত [যেমন MyClass (প্রাইভেট)] বিভাগগুলি ব্যবহার করা সম্ভব ।

এই পদ্ধতির 2 টি সমস্যা রয়েছে:

  1. এক্সকোড (এবং সংকলক?) আপনি @ কপিরাইট ব্লক সম্পর্কিত ব্যক্তিগত বিভাগে সমস্ত পদ্ধতি নির্ধারণ করে কিনা তা পরীক্ষা করে না
  2. আপনাকে মাইক্লাস.এম ফাইলের শুরুতে আপনার ব্যক্তিগত বিভাগ ঘোষণা করার জন্য @ ইন্টারফেস লাগাতে হবে, অন্যথায় এক্সকোড "সেলফু" বার্তাকে "নিজের প্রতিক্রিয়া জানাতে পারে না" এই জাতীয় বার্তায় অভিযোগ করে।

প্রথম ইস্যুটি খালি বিভাগ [যেমন মাইক্লাস ()] নিয়ে কাজ করা যেতে পারে ।
দ্বিতীয়টি আমাকে খুব বিরক্ত করে। আমি ফাইলের শেষের কাছে প্রাইভেট পদ্ধতি প্রয়োগ (এবং সংজ্ঞায়িত) দেখতে চাই; এটা সম্ভব কিনা জানি না।


1
: লোকগুলি এই প্রশ্নের আকর্ষণীয় হতে পারে stackoverflow.com/questions/2158660/...
bbum

উত্তর:


436

অন্যরা ইতিমধ্যে বলেছে, উদ্দেশ্য-সি-তে ব্যক্তিগত পদ্ধতির মতো জিনিস নেই। তবে, অবজেক্টিভ-সি 2.0 থেকে শুরু করে (যার অর্থ ম্যাক ওএস এক্স লিওপার্ড, আইফোন ওএস 2.0, এবং পরবর্তী) আপনি ক্লাস এক্সটেনশন@interface MyClass () নামে একটি খালি নাম (অর্থাত্ ) দিয়ে একটি বিভাগ তৈরি করতে পারেন । কোন শ্রেণি সম্প্রসারণ সম্পর্কে অনন্য কি তা হল যে পদ্ধতিটির বাস্তবায়নগুলি অবশ্যই জনসাধারণের পদ্ধতির মতো হয়। সুতরাং আমি আমার ক্লাসগুলি এভাবে গঠন করি:@implementation MyClass

.H ফাইলটিতে:

@interface MyClass {
    // My Instance Variables
}

- (void)myPublicMethod;

@end

এবং .m ফাইলে:

@interface MyClass()

- (void)myPrivateMethod;

@end

@implementation MyClass

- (void)myPublicMethod {
    // Implementation goes here
}

- (void)myPrivateMethod {
    // Implementation goes here
}

@end

আমি মনে করি এই পদ্ধতির সর্বাধিক সুবিধা হ'ল এটি আপনাকে আপনার পদ্ধতি বাস্তবায়নের কার্যকারিতা দ্বারা গোষ্ঠীকরণ করতে দেয়, (কখনও কখনও স্বেচ্ছাসেবক) পাবলিক / প্রাইভেট পার্থক্য দ্বারা নয়।


8
এবং এটি একটি "এমওয়াই ক্লাস '-myPrivateMethod-" তে সাড়া নাও দিতে পারে, ব্যতিক্রম / ত্রুটি নয় gene
üzgür

2
এটি আসলে অ্যাপলের বয়লারপ্লেট কোডে দেখাতে শুরু করছে। ++
ক্রিস ট্রেহে

75
এলএলভিএম 4 সংকলক এবং এরপরে, আপনার এমনকি এটি করারও দরকার নেই। ক্লাস এক্সটেনশনে না রেখে আপনি কেবল তাদের প্রয়োগের মধ্যে এগুলি সংজ্ঞায়িত করতে পারেন।
আবাইজার্ন

1
আপনি যদি @ কমপ্লোরের সতর্কতাগুলি পেয়ে থাকেন তবে এটি কারণ যে আপনি এটি কল করে এমন অন্য পদ্ধতির চেয়ে নীচে একটি পদ্ধতিটি সংজ্ঞায়িত করেছেন (অ্যান্ডির উত্তর দেখুন) - এবং আপনি আপনার বিপদে এই সতর্কতাগুলি উপেক্ষা করছেন। আমি এই ভুলটি করেছিলাম এবং if (bSizeDifference && [self isSizeDifferenceSignificant:fWidthCombined])...সংক্ষেপক ঠিকঠাক হয়ে পড়েছি যতক্ষণ না আমি এই ধরণের কলটি নাস্ট করেছি : তারপরে fWidthCompined সর্বদা 0 হিসাবে আসছিল
উইনেকে

6
@ উইনকে অর্ডার নিয়ে আর চিন্তা করার দরকার নেই। এলএলভিএমের সাম্প্রতিক সংস্করণগুলি যেখানে ডাকা হয়েছে তার নীচে প্রদর্শিত হলেও পদ্ধতিটি এটি সন্ধান করবে।
স্টিভ ওয়াডিকোর

52

অবজেক্টিভ-সি-তে সত্যিই কোনও "বেসরকারী পদ্ধতি" নেই, যদি রানটাইম এটি ব্যবহার করতে পারে তবে কোন প্রয়োগটি এটি কার্যকর করবে। তবে এটি বলার অপেক্ষা রাখে না যে এমন কোনও পদ্ধতি নেই যা ডকুমেন্টেড ইন্টারফেসের অংশ নয়। এই পদ্ধতির জন্য আমি মনে করি যে একটি বিভাগ ঠিক আছে। @interfaceআপনার পয়েন্ট 2 এর মতো .m ফাইলের শীর্ষে রাখার পরিবর্তে , আমি এটির নিজের .h ফাইলটিতে রেখে দেব। আমি যে কনভেনশনটি অনুসরণ করি (এবং অন্য কোথাও দেখেছি, আমি মনে করি এটি একটি অ্যাপল কনভেনশন হিসাবে Xcode এখন এর জন্য স্বয়ংক্রিয় সমর্থন দেয়) এই জাতীয় ফাইলটির শ্রেণি এবং বিভাগের সাথে একটি + আলাদা করে নামকরণ করার জন্য এটি @interface GLObject (PrivateMethods)পাওয়া যেতে পারে GLObject+PrivateMethods.h। শিরোনাম ফাইল সরবরাহ করার কারণটি হ'ল আপনি এটি আপনার ইউনিট পরীক্ষার ক্লাসগুলিতে আমদানি করতে পারেন :-)।

যাইহোক, .m ফাইলের শেষের নিকটবর্তী পদ্ধতিগুলি প্রয়োগ / সংজ্ঞায়িত করার ক্ষেত্রে, আপনি .m ফাইলের নীচে বিভাগটি প্রয়োগ করে একটি বিভাগের সাথে এটি করতে পারেন:

@implementation GLObject(PrivateMethods)
- (void)secretFeature;
@end

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

এমনকি ক্লাস এক্সটেনশনের সাহায্যেও আমি প্রায়শই একটি পৃথক শিরোনাম ( GLObject+Extension.h) তৈরি করব যাতে প্রয়োজনে আমি "বন্ধু" বা "সুরক্ষিত" দৃশ্যমানতার নকল করে সেই পদ্ধতিগুলি ব্যবহার করতে পারি।

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


37

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


4
এই সমাধানটির সুবিধা রয়েছে যে এটি কেবলমাত্র একটি সংকলক সতর্কতা এড়ানোর জন্য অতিরিক্ত প্রোগ্রাম কাঠামো যুক্ত করা এড়ায়।
জান হেটিচ

1
আমিও এটি করার প্রবণতা রাখি, তবে এটি কোনও উদ্দেশ্য-সি বিশেষজ্ঞও নয়। বিশেষজ্ঞদের জন্য, এইভাবে এটি না করার কোনও কারণ আছে (পদ্ধতির ক্রম ইস্যুটি বাদ দিয়ে)?
এরিক স্মিথ

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

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

@ জবাবদিহি থেকে এই প্রতিক্রিয়াটিও দেখুন
লেগওয়েজলে

19

@implementationব্লকে আপনার ব্যক্তিগত পদ্ধতিগুলি সংজ্ঞায়িত করা বেশিরভাগ কারণে আদর্শ। @implementationবিবৃতি অর্ডার নির্বিশেষে ঝাঁকুনিগুলি এগুলির মধ্যে দেখতে পাবে । শ্রেণি ধারাবাহিকতায় (ওরফে শ্রেণির সম্প্রসারণ) বা নামধারী বিভাগে এগুলি ঘোষণার দরকার নেই।

কিছু ক্ষেত্রে, আপনাকে শ্রেণীর ধারাবাহিকতায় পদ্ধতিটি ঘোষণা করতে হবে (উদাহরণস্বরূপ যদি শ্রেণি ধারাবাহিকতা এবং এর মধ্যে নির্বাচক ব্যবহার করা হয় @implementation)।

static বিশেষত সংবেদনশীল বা গতির সমালোচনামূলক ব্যক্তিগত পদ্ধতির জন্য ফাংশনগুলি খুব ভাল।

উপসর্গ নামকরণের জন্য একটি সম্মেলন আপনাকে দুর্ঘটনাক্রমে ব্যক্তিগত পদ্ধতিগুলিকে ওভাররাইড করা এড়াতে সহায়তা করতে পারে (আমি শ্রেণীর নামটিকে উপসর্গ হিসাবে নিরাপদ বলে মনে করি)।

নামযুক্ত বিভাগগুলি (যেমন @interface MONObject (PrivateStuff)) লোড করার সময় সম্ভাব্য নামকরণের সংঘর্ষের কারণে বিশেষ করে ভাল ধারণা নয়। এগুলি কেবলমাত্র বন্ধু বা সুরক্ষিত পদ্ধতির জন্য কার্যকর (যা খুব কমই ভাল পছন্দ হয়)। আপনাকে অসম্পূর্ণ বিভাগ বাস্তবায়নের বিষয়ে সতর্ক করা হয়েছে তা নিশ্চিত করার জন্য, আপনাকে অবশ্যই এটি বাস্তবায়ন করা উচিত:

@implementation MONObject (PrivateStuff)
...HERE...
@end

এখানে একটি ছোট এনোটোটেট করা চিট শীট:

MONObject.h

@interface MONObject : NSObject

// public declaration required for clients' visibility/use.
@property (nonatomic, assign, readwrite) bool publicBool;

// public declaration required for clients' visibility/use.
- (void)publicMethod;

@end

MONObject.m

@interface MONObject ()
@property (nonatomic, assign, readwrite) bool privateBool;

// you can use a convention where the class name prefix is reserved
// for private methods this can reduce accidental overriding:
- (void)MONObject_privateMethod;

@end

// The potentially good thing about functions is that they are truly
// inaccessible; They may not be overridden, accidentally used,
// looked up via the objc runtime, and will often be eliminated from
// backtraces. Unlike methods, they can also be inlined. If unused
// (e.g. diagnostic omitted in release) or every use is inlined,
// they may be removed from the binary:
static void PrivateMethod(MONObject * pObject) {
    pObject.privateBool = true;
}

@implementation MONObject
{
    bool anIvar;
}

static void AnotherPrivateMethod(MONObject * pObject) {
    if (0 == pObject) {
        assert(0 && "invalid parameter");
        return;
    }

    // if declared in the @implementation scope, you *could* access the
    // private ivars directly (although you should rarely do this):
    pObject->anIvar = true;
}

- (void)publicMethod
{
    // declared below -- but clang can see its declaration in this
    // translation:
    [self privateMethod];
}

// no declaration required.
- (void)privateMethod
{
}

- (void)MONObject_privateMethod
{
}

@end

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


1
পদ্ধতির নাম উপসর্গ হিসাবে পুরো শ্রেণীর নাম ব্যবহার করার জন্য +1! এটি কেবল একটি আন্ডারস্কোর বা এমনকি আপনার নিজের টিএলএর চেয়ে অনেক বেশি নিরাপদ। (যদি ব্যক্তিগত প্রকল্পটি আপনার লাইব্রেরিতে থাকে যা আপনি আপনার অন্য প্রকল্পে ব্যবহার করেন এবং আপনি ভুলে যান যে আপনি ইতিমধ্যে এই নামটি এক বছর বা দু'বছর আগে ব্যবহার করেছেন ...?)
বিগ_ম

14

আপনি আপনার প্রয়োগের নীচে বা উপরে একটি স্ট্যাটিক ফাংশন সংজ্ঞায়িত করার চেষ্টা করতে পারেন যা আপনার উদাহরণটিতে একটি পয়েন্টার নেয়। এটি আপনার যে কোনও উদাহরণ ভেরিয়েবল অ্যাক্সেস করতে সক্ষম হবে।

//.h file
@interface MyClass : Object
{
    int test;
}
- (void) someMethod: anArg;

@end


//.m file    
@implementation MyClass

static void somePrivateMethod (MyClass *myClass, id anArg)
{
    fprintf (stderr, "MyClass (%d) was passed %p", myClass->test, anArg);
}


- (void) someMethod: (id) anArg
{
    somePrivateMethod (self, anArg);
}

@end

1
অ্যাপল তার নিজস্ব ব্যবহারের জন্য শীর্ষস্থানীয় আন্ডারস্কোর সহ সংরক্ষিত নামগুলি।
জর্জি স্কলি

1
এবং আপনি যদি অ্যাপলের ফ্রেমওয়ার্কগুলি ব্যবহার না করেন? আমি প্রায়শই উদ্দেশ্য সি কোড ছাড়া অ্যাপলের অবকাঠামো, লিনাক্স, উইন্ডোজ এবং ম্যাক অপারেটিং সিস্টেম এক্স আমি আসলে আমি বিল্ড সরানো তবুও এটি অধিকাংশ লোক যারা উদ্দেশ্য সি কোড সম্ভবত ম্যাক OS X তে এটি ব্যবহার করবেন বিবেচনায় বিকাশ
dreamlax

3
আমি মনে করি এটি এম। এম ফাইলে প্রকৃতপক্ষে ব্যক্তিগত পদ্ধতি। অন্যান্য শ্রেণীর বিভাগের পদ্ধতিগুলি আসলে ব্যক্তিগত নয় কারণ আপনি কেবল @ ইনটারফেস ... @ এন্ড ব্লক পদ্ধতিতে ব্যক্তিগত রাখতে পারবেন না।
ডেভিড.চু.কো.আ

তুমি ওটা কেন করবে? আপনি যদি পদ্ধতির সংজ্ঞাটির শুরুতে কেবল "-" যুক্ত করেন তবে প্যারামিটার হিসাবে পাস না করেই আপনি "স্ব" অ্যাক্সেস করতে পারবেন।
গাই

1
@ গুয়: কারণ এরপরে পদ্ধতিটি প্রতিবিম্বের দ্বারা সনাক্তযোগ্য এবং সেহেতু মোটেই ব্যক্তিগত নয়।
স্বপ্ন

3

আপনি ব্লক ব্যবহার করতে পারেন?

@implementation MyClass

id (^createTheObject)() = ^(){ return [[NSObject alloc] init];};

NSInteger (^addEm)(NSInteger, NSInteger) =
^(NSInteger a, NSInteger b)
{
    return a + b;
};

//public methods, etc.

- (NSObject) thePublicOne
{
    return createTheObject();
}

@end

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


1
আপনি এখানে যা করেছেন তা হ'ল একটি গ্লোবাল ব্লক-ধরণের ভেরিয়েবল তৈরি করা যা কোনও ফাংশনের চেয়ে সত্যিই ভাল কিছু নয় (এবং এমনকি সত্যিকারের ব্যক্তিগতও নয়, যেহেতু এটি ঘোষণা করা হয়নি static)। তবে আমি প্রাইভেট আইভারগুলিকে (ডিআইডি পদ্ধতি থেকে) ব্লকগুলি বরাদ্দ করার বিষয়ে পরীক্ষা-নিরীক্ষা করছি - কাইন্ডা জাভাস্ক্রিপ্ট-স্টাইল - যা প্রাইভেট আইভারগুলিতে অ্যাক্সেসের অনুমতি দেয় যা স্থির ফাংশনগুলি থেকে সম্ভব নয় something আমি কোনটি পছন্দ করি তা এখনও নিশ্চিত নয়।
বড়_ম

3

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

নীচের কোড হিসাবে অনুরূপ স্বাক্ষর দিয়ে আপনার পদ্ধতিটি সংজ্ঞায়িত করুন ...

-(void)myHelperMethod: (id) sender{
     // code here...
}

তারপরে আপনার যখন পদ্ধতিটি উল্লেখ করতে হবে তখন কেবল এটি নির্বাচক হিসাবে কল করুন ...

[self performSelector:@selector(myHelperMethod:)];

কোডের এই লাইনটি আপনি যে পদ্ধতিটি তৈরি করেছেন এবং এটি শিরোনাম ফাইলে সংজ্ঞায়িত না করার বিষয়ে বিরক্তিকর সতর্কতা না রাখে।


6
এইভাবে আপনার তৃতীয় প্যারামিটারটি পাস করার কোনও উপায় নেই।
লি ফুমিন

2

আপনি যদি @interfaceশীর্ষে থাকা ব্লকটি এড়াতে চান তবে আপনি সর্বদা ব্যক্তিগত ঘোষণাগুলি অন্য কোনও ফাইলে রাখতে MyClassPrivate.hপারবেন আদর্শ নয় তবে এটি বাস্তবায়নে বিশৃঙ্খলা সৃষ্টি করছে না।

MyClass.h

interface MyClass : NSObject {
 @private
  BOOL publicIvar_;
  BOOL privateIvar_;
}

@property (nonatomic, assign) BOOL publicIvar;
//any other public methods. etc
@end

MyClassPrivate.h

@interface MyClass ()

@property (nonatomic, assign) BOOL privateIvar;
//any other private methods etc.
@end

MyClass.m

#import "MyClass.h"
#import "MyClassPrivate.h"
@implementation MyClass

@synthesize privateIvar = privateIvar_;
@synthesize publicIvar = publicIvar_;

@end

2

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

//MyClass.m
#import "MyClass.h"
#import "MyClass_private.h"

1

সমস্যা # 2 ঘুরে দেখার কোন উপায় নেই। সি সংকলকটি (এবং এজন্য অবজেক্টিভ-সি সংকলক) ঠিক সেভাবেই কাজ করে। আপনি যদি এক্সকোড সম্পাদক ব্যবহার করেন তবে ফাংশন পপআপটি ফাইলটিতে @interfaceএবং @implementationব্লকগুলিতে নেভিগেট করা সহজ করে তুলবে ।


1

ব্যক্তিগত পদ্ধতি অনুপস্থিতিতে একটি সুবিধা রয়েছে। আপনি যে যুক্তিটি পৃথক শ্রেণিতে লুকিয়ে রাখতে চেয়েছিলেন তা সরতে এবং প্রতিনিধি হিসাবে ব্যবহার করতে পারেন। এই ক্ষেত্রে আপনি প্রতিনিধি অবজেক্টটিকে ব্যক্তিগত হিসাবে চিহ্নিত করতে পারেন এবং এটি বাইরে থেকে দৃশ্যমান হবে না। পৃথক শ্রেণিতে যুক্তিযুক্ত স্থানান্তর (সম্ভবত বেশ কয়েকটি) আপনার প্রকল্পের আরও ভাল নকশা তৈরি করে। আপনার ক্লাসগুলি আরও সহজ হয়ে যাওয়ার কারণ এবং আপনার পদ্ধতিগুলি যথাযথ নাম সহ ক্লাসে শ্রেণিবদ্ধ করা হয়েছে।


0

অন্য লোকেরা @implementationযেমন ব্লকটিতে ব্যক্তিগত পদ্ধতিগুলি সংজ্ঞায়িত করা বেশিরভাগ কারণে ঠিক।

কোড সংগঠনের বিষয়ে - আমি pragma mark privateএক্সকোডে আরও সহজে নেভিগেশনের জন্য এগুলিকে একসাথে রাখতে চাই

@implementation MyClass 
// .. public methods

# pragma mark private 
// ...

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