1:NS_ASSUME_NONNULL_BEGIN / NS_ASSUME_NONNULL_END
NS_ASSUME_NONNULL_BEGIN
@Interface People:NSObject
@property (nonatomic, strong) NSString name;
@property (nonatomic, strong) NSString gender;
@end
NS_ASSUME_NONNULL_END
以上表明属性name和gender是nonnull类型的,在调用[self setName:nil];或者[self setGender:nil]; 编译器会给出警告:Null passed to a callee that requires a non-null argument.
只是一个警告,编译还是可以通过的。
2:DEPRECATED_MSG_ATTRIBUTE
@property (nonatomic, assign) NSStringEncoding stringEncoding DEPRECATED_MSG_ATTRIBUTE(“The string encoding is never used.”)
用来标注,此方法或者属性不再建议使用,可以在后边添加说明,使用后编译会有警告提示。
3:NS_SWIFT_NOTHROW
- (nullable id)responseObjectForResponse:(nullable NSURLResponse )response
data:(nullable NSData )data
error:(NSError _Nullable __autoreleasing )error NS_SWIFT_NOTHROW;
使用 NS_SWIFT_NOTHROW , 将不会使用swift的异常抛出机制.
4:NS_DESIGNATED_INITIALIZER
- (instancetype)initWithBaseURL:(nullable NSURL )url在初始化类的实例时,无论调用关系如何复杂,必须调用一次该类的Designated intializer(可以有多个),对于 Designated intializer,必须调用父类的Designated intializer。对于父类的父类这个规则亦然,对Designated intializer的调用一直要到根类。
sessionConfiguration:(nullable NSURLSessionConfiguration )configuration NS_DESIGNATED_INITIALIZER;
5:DEPRECATED_ATTRIBUTE
@property(nontamic, strong) NSString *name; DEPRECATED_ATTRIBUTE用来标注此方法或者属性已不再建议使用,如果使用编译时会有警告提示。
6:NSParameterAssert
断言评估一个条件,如果条件为 false ,调用当前线程的断点句柄。每一个线程有它自已的断点句柄,它是一个 NSAsserttionHandler 类的对象。当被调用时,断言句柄打印一个错误信息,该条信息中包含了方法名、类名或函数名。然后,它就抛出一个 NSInternalInconsistencyException 异常。
Assertions evaluate a condition and, if the condition evaluates to false, call the assertion handler for the current thread, passing it a format string and a variable number of arguments. Each thread has its own assertion handler, which is an object of classNSAssertionHandler. When invoked, an assertion handler prints an error message that includes method and class names (or the function name). It then raises anNSInternalInconsistencyException exception.
这个宏用于确认一个 Objective-C 的方法的有效性。简单提供参数作为条件就行。该宏评估这个参数,如果为 false ,它就打印一个错误日志信息,该信息包含了参数并且抛出一个异常。
This macro validates a parameter for an Objective-C method. Simply provide the parameter as the condition argument. The macro evaluates the parameter and, if it is false, it logs an error message that includes the parameter and then raises an exception.
如果定义了预处理宏 NS_BLOCK_ASSERTIONS 断言就被禁止了。所有的断点宏都返回 void。
Assertions are disabled if the preprocessor macro NS_BLOCK_ASSERTIONS is defined. All assertion macros return void.
如:
- (void)doSomethingWithName:(NSString )name id:(NSString )id
{
NSParameterAssert(name);
NSParameterAssert(id);
}
7:NSCParameterAssert
作用同NSCParameterAssert,只不过实在c函数中进行断言的。