나는 상당히 큰 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에서 경고를 표시하는 대안이 있습니까?
답변
지원 중단 구문
메소드가 더 이상 사용되지 않는 것으로 표시하기 위해 구문이 제공됩니다.
@interface SomeClass
-method __attribute__((deprecated));
@end
또는:
#include <AvailabilityMacros.h>
@interface SomeClass
-method DEPRECATED_ATTRIBUTE; // or some other deployment-target-specific macro
@end
답변
IMHO, __deprecated를 작성하는 것이 더 쉽습니다.
- (void)myDeprecatedMethod __deprecated;
- (int)methodNameDeprecated:(int)param __deprecated;
수업에서도 작동
__deprecated
@interface MyDeprecatedClass
// ... some properties and methods ...
@end
답변
더 이상 사용되지 않는 플래그와 함께 추가 메시지를 제공하려는 경우 다음 플래그를 사용할 수 있습니다.
@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 __ ((deprecated ( “메시지가 여기에 있습니다”)))
맨틀의 실제 사례
@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));