Objective c 如何在Objective C中设置仅在公共接口中弃用的方法
将任何方法设置为不推荐使用也同样简单。看Objective c 如何在Objective C中设置仅在公共接口中弃用的方法,objective-c,deprecated,Objective C,Deprecated,将任何方法设置为不推荐使用也同样简单。看 但是:我如何设置一个只供公共使用的方法 您可以在两个标题中定义它。。分为两类 不要在类本身上定义它 这样你就能把它们分开 e、 g.你有: T具有不推荐使用的属性。 但在内部,你想使用它 因此,对于“客户机”,您在类别中将其公开为已弃用,而私有m文件只是声明它本身未弃用 主文件:(客户端) 最后是不导入公共接口的T.m #import "T.h" @interface T () @property(nonatomic, copy) NSString
但是:我如何设置一个只供公共使用的方法 您可以在两个标题中定义它。。分为两类 不要在类本身上定义它 这样你就能把它们分开
e、 g.你有: T具有不推荐使用的属性。 但在内部,你想使用它 因此,对于“客户机”,您在类别中将其公开为已弃用,而私有m文件只是声明它本身未弃用 主文件:(客户端) 最后是不导入公共接口的T.m
#import "T.h"
@interface T ()
@property(nonatomic, copy) NSString *deprecated;
@end
@implementation T
- (id)init {
self = [super init];
self.deprecated = @"LALA";
NSLog(@"%@", self.deprecated); //NOT DEPRECATED!
return self;
}
@end
另一种选择是添加在构建标志中定义的宏,而不是在构建标志中定义的宏
// Add -DBUILDING_MYPROJECT=1 to your own build flags.
#if BUILDING_MYPROJECT
# define MYPROJECT_DEPRECATED_API
#else
# define MYPROJECT_DEPRECATED_API DEPRECATED_ATTRIBUTE
#endif
...
-(void) method MYPROJECT_DEPRECATED_API; // deprecated for clients, not deprecated for you
让我们感谢你(我认为是最好的)回答/解决方案。但是unf。它仍然是Object-C可能不支持的解决方案。对于我来说,拥有一个单独的接口文件可能有点复杂。还要记住的是,它需要导入一个特定的头文件来使用该类,这可能会让协作开发人员甚至我自己将来感到困惑。不过,我认为这是一个好的、易于理解的解决方案。我同意这会带来复杂性,而且这只是一个解决办法:)谢谢你的回答。这也是一个有趣的方法。但在我的例子中,我实际上并不像项目那样使用框架。请参阅我对这个问题的补充意见。我主要使用
弃用
标志进行重构。在那个特殊的案例中,我要求我有一种方法,我想保留在课堂上供内部使用。同时,它不应该再公开使用,因为我提供了一个改进的。但由于它的工作原理有点不同,我不能马上就到处使用它。
#import "T.h"
@interface T (Public)
@property(nonatomic, readonly, copy) NSString *deprecated DEPRECATED_ATTRIBUTE;
@end
#import "T.h"
@interface T ()
@property(nonatomic, copy) NSString *deprecated;
@end
@implementation T
- (id)init {
self = [super init];
self.deprecated = @"LALA";
NSLog(@"%@", self.deprecated); //NOT DEPRECATED!
return self;
}
@end
// Add -DBUILDING_MYPROJECT=1 to your own build flags.
#if BUILDING_MYPROJECT
# define MYPROJECT_DEPRECATED_API
#else
# define MYPROJECT_DEPRECATED_API DEPRECATED_ATTRIBUTE
#endif
...
-(void) method MYPROJECT_DEPRECATED_API; // deprecated for clients, not deprecated for you