Objective-C 修饰符
类型修饰符
@interface
:定义一个类的接口。@implementation
:定义一个类的实现。@protocol
:定义一个协议。@end
:结束一个类或协议的定义。@class
:声明一个类名,用于避免循环引用。@selector
:表示一个方法选择器的字符串。
属性修饰符
nonatomic
:非原子操作,不保证线程安全。atomic
:原子操作,保证线程安全。strong
/retain
:强引用,引用计数+1。weak
:弱引用,当引用对象被释放时,指针自动置为 nil。copy
:复制属性值,用于修饰 NSString、NSArray 等不可变对象类型。assign
:直接赋值,用于修饰基本数据类型、结构体等简单类型。
方法修饰符
-
:实例方法,由对象调用。+
:类方法,由类名调用。instancetype
:返回当前类的实例对象。id
:表示任意类型的对象。void
:表示返回值为空。SEL
:表示一个方法选择器。NS_NOESCAPE
:表示闭包参数不会逃逸出当前函数。
访问修饰符
@public
:公共访问权限,可以在任意位置被访问。@private
:私有访问权限,只能在定义该成员的类或对象内部访问。@protected
:受保护的访问权限,只能在定义该成员的类及其子类中访问。@package
:包内访问权限,只能在同一个框架或动态库中访问。
方法类型修饰符
NS_INLINE
:用于定义一个内联函数,可以减少函数调用的开销。NS_RETURNS_NOT_RETAINED
:表示返回的对象不需要进行 retain。NS_RETURNS_RETAINED
:表示返回的对象需要进行 retain。NS_CONSUMED
:表示参数对象会被消耗掉,在函数内部不能使用这个对象。
继承和多态修饰符
@interface ClassName : SuperClassName <ProtocolName>
:定义一个类,并继承自另一个类和一个或多个协议。super
:表示调用当前方法的父类实现。id<ProtocolName>
:表示对象遵循指定的协议,并可以调用该协议中定义的方法。
枚举修饰符
NS_ENUM()
、NS_OPTIONS()
:用于定义枚举类型。__attribute__((enum_extensibility(open)))
:表示枚举可以添加新的值。
其他修饰符
__nullable
/nullable
:表示对象可以为 nil。__nonnull
/nonnull
:表示对象不可以为 nil。__kindof
:表示返回值类型是当前类或其子类。__unused
:表示未使用的变量或函数。__weak
:弱引用。__strong
:强引用。__unsafe_unretained
:不安全的非强引用。__attribute__
:表示给函数、变量、类型等添加属性。__bridge
:用于桥接 Core Foundation 和 ARC 管理的对象。__typeof__
:获取表达式的类型。__block
:用于在 Blocks 中访问外部变量。
Swift 修饰符
类型修饰符
class
:表示一个类类型。struct
:表示一个结构体类型。enum
:表示一个枚举类型。protocol
:表示一个协议类型。extension
:为一个已有类型添加新的功能。
属性修饰符
var
:定义一个变量。let
:定义一个常量。lazy
:定义一个延迟初始化的属性。weak
:弱引用。unowned
:非空的非强引用。static
:定义一个静态属性或方法。class
:定义一个类属性或方法。private
:只在当前作用域可见。fileprivate
:只在当前文件内可见。internal
:只在当前模块内可见。public
:可以被其他模块访问。open
:可以被其他模块继承或重写。
方法修饰符
func
:定义一个函数或方法。init
:定义一个初始化方法。deinit
:定义一个析构方法。throws
:表示可能抛出异常。rethrows
:表示重新抛出异常。throws
/rethrows
后面跟随的是函数的具体异常类型。final
:表示该类或方法不能被子类继承或重载。
访问修饰符
Swift 中的访问级别分为五个等级,从高到低依次是:
open
:最高访问级别,可以被其他模块继承或重写。public
:可以被其他模块访问。internal
:只在当前模块内可见。fileprivate
:只在当前文件内可见。private
:只在当前作用域可见。
内存管理修饰符
weak
:弱引用。unowned
:非空的非强引用。unowned(safe)
:安全的非强制解包的非空非强引用。unowned(unsafe)
:不安全的强制解包的非空非强引用。@owned
:表示对于闭包中捕获的对象使用强引用。
协议修饰符
protocol<SomeProtocol>
:表示一个协议组合,要求遵循 SomeProtocol 协议。
泛型修饰符
<T>
:表示一个泛型类型参数。where T: SomeProtocol
:表示泛型类型 T 必须遵循 SomeProtocol 协议。
运算符修饰符
prefix
:前缀运算符。postfix
:后缀运算符。infix
:中缀运算符。associativity
:运算符结合性。precedence
:运算符优先级。
属性观察器修饰符
willSet
:表示属性值即将被设置时执行的代码块。didSet
:表示属性值已经被设置时执行的代码块。
条件编译修饰符
#if
、#elseif
、#else
、#endif
:条件编译指令,用于根据不同的编译条件编译不同的代码块。
线程修饰符
@async
、@await
:用于异步执行和等待异步执行结果。@MainActor
:表示当前代码只能在主线程中执行。@GlobalActor(n)
:指定代码所属的全局 actor。
类型转换修饰符
as
:用于将一个对象转换为另一个对象,也可用于类型判断。as?
、as!
:可选类型转换,尝试将一个对象转换为指定类型,成功则返回可选值,失败则返回 nil 或抛出异常。is
:用于检查一个对象是否是某个类型。
错误处理修饰符
try
、try?
、try!
:用于在函数中捕获和处理错误。throws
、rethrows
:用于声明函数可能抛出的错误类型。
泛型修饰符
where
:用于对泛型类型进行约束。associatedtype
:用于关联类型的声明。typealias
:用于给类型取别名。
其他修饰符
inout
:表示传递的参数是可修改的。@discardableResult
:表示函数的返回值可以被忽略。@escaping
:表示闭包参数可以逃逸出当前函数。@autoclosure
:表示将表达式自动封装成一个闭包,用于延迟计算。通常和??
运算符一起使用。