实现快速变更类名,而不需要更改文件名
#define ABC(x) ModuleName##x // ## 符号是将参数x作为字符串与 ##符号前面的字符串拼接在一起转成一个字符串
#define MyPrint(x) std::cout << #x << " is " << x <<std::endl; // #符号会将跟在后面的参数转成字符串,相当与在参数x上加上"",形成"x"
class ABC(class1) {
public:
ABC(class1)(std::string name) {
this->s_name = name;
}
void printInfo();
private:
std::string s_name;
};
void ABC(class1)::printInfo() {
std::cout << "My name is " << s_name << std::endl;
}
ABC(class1) test1 = ABC(class1)("haha");
test1.printInfo();
int i_num = 1021;
MyPrint(i_num)
- (instancetype)initWithName:(NSString *)name age:(NSUInteger)age NS_DESIGNATED_INITIALIZER;
NS_DESIGNATED_INITIALIZER,将方法指定为初始化的方法
- (instancetype)init NS_UNAVAILABLE;
NS_UNAVAILABLE将方法注释为不可用,编译器会在编译时报错,且Xcode智能提示不会给出提示
- (void)method1:(NSString *)p1 __deprecated;
__deprecated 将方法提示已经为不推荐使用
#if __has_feature(objc_arc)
- (void)methodWithARC;
#else
- (void)methodNoARC;
#endif
__has_feature(arg) 根据整个工程中是不是才有某种编译特性决定返回true or false,通常参数使用objc_arc
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
// code // 用来消除因为方法被标记为__deprecated,而带来的编译警告
#pragma clang diagnostic pop
循环引用
"-Warc-retain-cycles"
未使用变量
"-Wunused-variable"
指针类型不兼容
"-Wincompatible-pointer-types"
根据对应平台的操作系统版本进行条件编译
#if __IPHONE_OS_VERSION_MAX_ALLOWED(AvailabilityInternal.h) >= __IPHONE_10_0(Availability.h,系统版本存在的头文件)
#import <UserNotifications/UserNotifications.h>
#endif
备注:关于更多iOS 使用OC编码使用的宏,可以查阅:
异常宏:
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Foundation.framework/Versions/C/Headers/NSException.h
运行时宏:(一般是用来改变编译条件)
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Foundation.framework/Versions/C/Headers/NSObjCRuntime.h
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/TargetConditionals.h
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/Availability.h
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/AvailabilityInternal.h