Swift 内存安全检查

//
//  AccessMomory.swift
//  SwiftCode
//
//  Created by Alisa on 2022/4/15.
//  Copyright © 2022 Alisa. All rights reserved.
//

import Foundation

/*
    独占访问权限是Swift4中引入的一大新特性,很多开发者认为这是一种编译器的编译时特性,可以在数组越界时、对遍历中的数组删添元素时产生编译异常.
    其实并非如此,独占内存访问权限特性是一种编译时和运行时的安全特性,其和数组也没有任何关系。
    当两个变量访问同一块内存时,会产生独占内存访问权限
 
    在Swift4以前,程序对内存的读写访问并没有严格控制,你在读内存时有写内存操作,或者在写内存时有读操作并不会产生什么异常。Swift4中则引入了
独占内存访问权限的特性,如果符合如下3个条件,则程序会产生读写权限冲突:
    1> 至少有一个变量在使用写权限
    2> 变量访问的是同一个内存地址
    3> 持续时间有重叠
 
 ** inout 参数读写权限冲突
    一般情况下,值类型的传参总会产生复制操作,inout参数则使得函数内可以直接修改外部变量的值。inout参数是最容易产生读写冲突的场景
 
 ** 结构体中自修改函数的读写冲突
 
 ** 值类型中属性的读写访问权限冲突
    在Swift语言中,像结构体、枚举和元组中都有属性的概念,由于其都是值类型,因此在对不同的属性进行访问时都会产生冲突
    在开发过程中大部分对于不同属性的访问都不会产生读写冲突,对不同属性的访问需满足下面3个条件,才不会产生读写冲突:
        1> 访问的是存储属性,而不是计算属性
        2> 访问的是结构体局部变量(函数中的变量), 而不是全局变量
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值