উদ্দেশ্য-সি 2.0 তে অবহিত হিসাবে আমি কোনও পদ্ধতিতে কীভাবে পতাকাঙ্কিত করব?


141

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

এমন কোনও উপায় আছে যার মাধ্যমে আমি নির্দিষ্ট পদ্ধতিগুলিকে অবচয় হিসাবে চিহ্নিত করতে পারি (যেমন @deprecatedজাভা এবং [Obsolete]নেট মধ্যে))

আমি দেখতে পাচ্ছি যে অ্যাপল অ্যাভিয়েশনলিটি ব্যবহার করে এবং এর মতো ট্যাগ রয়েছে

__OSX_AVAILABLE_BUT_DEPRECATED(__MAC_NA,__MAC_NA,__IPHONE_2_0,__IPHONE_3_0);

... এটি করার একমাত্র উপায় (এটি কি অ্যাপ স্টোর এটি করা নিরাপদ?) অথবা এমন কোনও বিকল্প রয়েছে যা এক্সকোডে একটি সতর্কতা দেখিয়ে দেবে?

উত্তর:


163

অবমূল্যায়ন সিনট্যাক্স

সিনট্যাক্সটি অবচিত হিসাবে চিহ্নিত করার জন্য প্রদান করা হয়:

@interface SomeClass
-method __attribute__((deprecated));
@end

বা:

#include <AvailabilityMacros.h>
@interface SomeClass
-method DEPRECATED_ATTRIBUTE;  // or some other deployment-target-specific macro
@end

7
এই ম্যাক্রোটি আমার কাছে অর্থবোধ করে, এটি একটিরকম __attribute__সিন্টেক্সের অনুভূতি বজায় রাখে । #define __deprecated__ __attribute__((deprecated))
জেকেল

মজার বিষয় হল এক্সকোড অবহেলিত হিসাবে চিহ্নিত পদ্ধতি ব্যবহারের জন্য আমাকে কোনও সতর্কতা দেয় না। একটি সংকলক পতাকা সেট করা প্রয়োজন আছে?
স্মরণে

এক্সকোডের কোড সমাপ্তি ড্রপডাউন-এ, আমি দেখছি যে পদ্ধতিটি অবচিত হিসাবে চিহ্নিত হয়েছে, তবে এটি ব্যবহার করে সংকলক সতর্কতা দেয় না।
স্মরণে

1
@ বিজ্ঞাপনবার্ট বিল্ড সেটিংস> অবহেলিত ফাংশন সম্পর্কে সতর্ক করুন ... এটিকে হ্যাঁ সেট করুন
বান্দেজপাইসা

বিকল্প পদ্ধতিটি কীভাবে ব্যবহার করা উচিত?
ওএক্সএক্সওয়াই

135

আইএমএইচও, এটি লেখা সহজ __ সম্মতিযুক্ত:

- (void)myDeprecatedMethod __deprecated;
- (int)methodNameDeprecated:(int)param __deprecated;

ক্লাসে খুব কাজ করে

__deprecated
@interface MyDeprecatedClass

  // ... some properties and methods ...

@end

2
এটি করার আরও অনেক ভাল উপায়।
এসজি 1

1
কোনও বিবরণ সরবরাহ করা হয়নি, তাই আপনি জানতে পারবেন না যে আপনার আলাদা পদ্ধতি ব্যবহার করা উচিত বা কী ...
raistlin

1
# নির্ধারণ __ সম্মানজনক __প্রেমী __ ((অবচয়))
পরাগ

এর চেয়ে ভাল কেন DEPRECATED_ATTRIBUTE? কেবল এটি সংক্ষিপ্ত হওয়ার কারণে বা কোনও বাস্তব পার্থক্য রয়েছে?
কেলিন

88

অবনতি পতাকা সহ আপনি যদি অতিরিক্ত বার্তা দিতে চান তবে নীচের পতাকাগুলি ব্যবহার করতে পারেন।

@property (strong, nonatomic) NSString *catName
                    __deprecated_msg("use name instead.");

//  -- Or -- 
@property (strong, nonatomic) NSString *catName
                    DEPRECATED_MSG_ATTRIBUTE("use name instead.");

//  -- Or -- 
@property (strong, nonatomic) NSString *catName
                    __attribute__((deprecated("use name instead.")));

উল্লিখিত পতাকাগুলি ব্যবহার করে আপনি বলতে পারবেন যে আপনি কেন অবচয় করছেন বা ভবিষ্যতে কী পদ্ধতি বিকাশকারীকে ব্যবহার করা উচিত।


2
আমি অবমূল্যায়ন সতর্কতা সহ একটি বার্তা পছন্দ করি। এটি একটি এপিআই এর নতুন ব্যবহারকারীদের জন্য আরও অনেক সহায়ক। সুতরাং, আমি মনে করি এটি সেরা উত্তর।
johnnieb

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

15

কোনও পদ্ধতির অবচয় হিসাবে চিহ্নিত করতে, __attribute __ ব্যবহার করুন (অবমূল্যায়ন ("আপনার বার্তাটি এখানে যায়")))

মেন্টল থেকে একটি ব্যবহারিক উদাহরণ

@interface NSValueTransformer (UnavailableMTLPredefinedTransformerAdditions)

+ (NSValueTransformer *)mtl_externalRepresentationTransformerWithModelClass:(Class)modelClass __attribute__((deprecated("Replaced by +mtl_JSONDictionaryTransformerWithModelClass:")));
+ (NSValueTransformer *)mtl_externalRepresentationArrayTransformerWithModelClass:(Class)modelClass __attribute__((deprecated("Replaced by +mtl_JSONArrayTransformerWithModelClass:")));

@end

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