Я являюсь частью команды, разрабатывающей довольно большое приложение для iPad, и в результате мы создали много разных классов. Проблема в том, что некоторые из методов сейчас в значительной степени устарели, и я пока не хочу просто удалять их, поскольку я знаю, что некоторые части общей системы используют эти методы ... но есть лучшие (более новые) варианты, которые следует использовать вместо этого (некоторые из старых фактически вызывают новые, но общий интерфейс класса становится беспорядочным).
Есть ли способ пометить определенные методы как устаревшие (например, @deprecated
в Java и [Obsolete]
.NET).
Я вижу, что Apple использует Availability.h и имеет такие теги, как
__OSX_AVAILABLE_BUT_DEPRECATED(__MAC_NA,__MAC_NA,__IPHONE_2_0,__IPHONE_3_0);
... это единственный способ сделать это (+ безопасно ли это в App Store?) или есть альтернативы, которые будут отмечать предупреждение в Xcode?
источник
__attribute__
синтаксиса.#define __deprecated__ __attribute__((deprecated))
ИМХО, проще написать __deprecated:
- (void)myDeprecatedMethod __deprecated; - (int)methodNameDeprecated:(int)param __deprecated;
Тоже работает на занятиях
__deprecated @interface MyDeprecatedClass // ... some properties and methods ... @end
источник
DEPRECATED_ATTRIBUTE
? Просто потому, что он короче или есть реальная разница?Если вы хотите дать дополнительное сообщение с флагом устаревания, вы можете использовать следующие флаги.
@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.")));
Используя вышеупомянутые флаги, вы можете сказать, почему вы отказываетесь от поддержки или какой метод должен использовать разработчик в будущем.
источник
Чтобы пометить метод как устаревший, используйте __attribute __ ((устаревший ("Ваше сообщение отправляется сюда")))
Практический пример из Mantle
@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
источник
Используйте
deprecated
атрибут:- (int)bar: (int)x __attribute__((deprecated));
источник