iOS基础之修饰符

一、Objective-C

@automic :原子的,表示线程安全,目的是确保其他线程不在同一时间内访问相同的资源;
@nonatomic :非原子的,表示线程不安全,可以在不同位置读写属性的值;
@readwrite :编译器会为属性生成get和set方法;
@readonly :编译器只生成get方法;
@protected :缺省,受保护的成员变量;
@public :公开的成员变量;
@private :私有成员变量;
@copy :copy,会重新分配内存;

block分为全局block、堆block和栈block;

方法是在内存的栈区,每个方法都是在被调用的时候从硬盘到内存,然后去执行,执行完就消失;

Objective-C中的类对象(堆区),block(栈区)当使用copy修饰时,系统会把block拷贝到堆区,这样属性就拥有block的所有权保证block不会提前释放;
@weak不增加引用计数,也不持有对象,ARC中使用,只可修饰对象;RunTime维护了一个weak表,用于存储指向某个对象的所有weak指针,weak表是一个hash table,key为所指对象的地址,value是weak指针的地址数组;
初始化时,RunTime会调用objc_initWeak初始化一个新的weak指针指向对象的地址,添加引用时,objc_initWeak函数会调用objc_storeWeak函数更新指针指向,创建对应的weak table,释放时,调用clearDeallocating根据对象地址获取所有的weak指针地址的数组,遍历数组把数据至空,最后将weak table中这个entry删除并清理对象记录

在xib/storyboard中的控件使用weak修饰;
@assign :修饰基本数据类型,分配在栈上,由系统分配和释放;
@strong :强引用;
__block :如果可以访问局部变量但是不能修改局部变量可以使用,编译器会将__block变量包装成一个对象,变成对象后就可以根据指针地址在block内部去修改外部的变量;
__strong :对变量强引用;
unsafe_unretained :在所修饰的对象被释放后,该指针就变成了野指针;
@assign:不会使引用计数加1,直接赋值,可修饰对象和基本数据类型;

二、Swift

let 修饰常量;
var 修饰变量;
typealias 修饰类型别名;
func 修饰函数声明;
inout 修饰输入输出参数(copy-in copy-out),函数调用时,参数的值被copy;

函数内部时,copy的值被修改;

函数返回时,copy的值被赋值给原参数;

**_**命名的参数被显式忽略;

**...**参数基本类型名称后紧跟三个点,会被视为可变参数;
mutating 自身修改,Enum或extension的方法如果会修改self,需要以mutating标记;
override 重写超类中的方法;
static 类型方法,如果是class中的方法使用static或class final修饰则不可被重写,class中使用class修饰的方法则可被重写;
throws 抛出错误的函数和方法;
rethrows 重抛错误的函数和方法;
async 异步函数和方法;
Never 表示函数或方法不会返回给它的调用者(不归函数);
Struct 结构体声明、Enum 枚举声明、Class 类声明、Actor 声明、Protocol 协议声明、extension 拓展声明、Associatedtype 协议关联类型声明、Subscript 下标声明、init 构造器声明(init?可失败构造器)、convenience 便利构造器;
required 子类必须实现;
deinit 析构器声明;
operator 运算符声明(infix 中缀、prefix 前缀、postfix 后缀),使用于运算符重载;
open 所有命名空间可访问、继承和重写;
public 所有命名空间内可访问,但其他命名空间不能继承和重写;
internal 默认访问级别,可以访问同一命名空间,但其他实体不能访问该实体;
fileprivate 文件内私有;
private类私有;

相关推荐
ifeng09184 小时前
鸿蒙应用开发常见Crash场景解析:线程安全与异常边界处理
安全·cocoa·harmonyos
醇氧5 小时前
Mac 安装 Docker Desktop
macos·docker·容器
2501_916007476 小时前
iOS 压力测试的工程化体系,构建高强度、多维度、跨工具协同的真实负载测试流程
android·ios·小程序·uni-app·cocoa·压力测试·iphone
神秘人-解说7 小时前
在Mac上安装Windows 11/10双系统(M1/M2/Intel通用)
windows·macos·mac安装双系统·mac安装虚拟机·mac安装windows
知难行难7 小时前
macOS配置Apocrita及ssh访问及获取GPU权限
运维·macos·ssh
2501_916008897 小时前
API接口调试全攻略 Fiddler抓包工具、HTTPS配置与代理设置实战指南
前端·ios·小程序·https·fiddler·uni-app·webview
2501_915921439 小时前
iOS 开发者工具推荐,构建从调试到性能优化的多维度生产力工具链(2025 深度工程向)
android·ios·性能优化·小程序·uni-app·iphone·webview
00后程序员张11 小时前
全面解析网络抓包工具使用:Wireshark和TCPDUMP教程
网络·ios·小程序·uni-app·wireshark·iphone·tcpdump
游戏开发爱好者811 小时前
Mac 抓包软件怎么选?从 HTTPS 调试、TCP 数据流分析到多工具协同的完整抓包方案
tcp/ip·macos·ios·小程序·https·uni-app·iphone
马拉萨的春天13 小时前
iOS中广告SDK如何判断一个广告是否真实展示
macos·ios·cocoa