首页 Objective-C和Swift中常见的修饰符
文章
取消

Objective-C和Swift中常见的修饰符

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:用于检查一个对象是否是某个类型。

错误处理修饰符

  • trytry?try!:用于在函数中捕获和处理错误。
  • throwsrethrows:用于声明函数可能抛出的错误类型。

泛型修饰符

  • where:用于对泛型类型进行约束。
  • associatedtype:用于关联类型的声明。
  • typealias:用于给类型取别名。

其他修饰符

  • inout:表示传递的参数是可修改的。
  • @discardableResult:表示函数的返回值可以被忽略。
  • @escaping:表示闭包参数可以逃逸出当前函数。
  • @autoclosure:表示将表达式自动封装成一个闭包,用于延迟计算。通常和 ?? 运算符一起使用。
本文由作者按照 CC BY 4.0 进行授权

Nginx+Hugo搭建博客并部署到服务器

M1 Mac非兼容模式安装CocoaPods