iOS - assign 修饰词

2023-09-02  本文已影响0人  AlexLi_

Tags: Objective-C, iOS, 修饰词
Demo: https://github.com/lishangjing-dmeo/AssignObjectDemo

通常用于修饰基础数据类型(如NSInteger、BOOL等)和C数据类型(如int、float,double等)

常用与基本数据类型,也可以作用在对象类型

若作用与对象类型时,会存在野指针的情况,所以我们平时不会通过 assign 来修饰对象类型


遇到的问题:

当我尝试用 NSString 和 NSObject 分别来复现该结论时,发现 NSString 并没有复现野指针问题,我创建 NSString 的方式是,创建方式导致我无法复现

NSString *str2 = [NSString stringWithFormat:@"123"];

扩展&解决问题:

这里的对象类型中,NSString 存在特殊的情况

NSString *str1 = [NSString stringWithFormat:@"小强"];
NSString *str2 = [NSString stringWithFormat:@"1"];
NSString *str3 = [NSString stringWithFormat:@"a"];
NSString *str4 = @"123456789";

__NSCFConstantString

显然是常量字符串,自然就是存储在常量区

__NSCFString

表示为oc对象,NSString就是封装的CFString,0x6000000315c0 地址显示这个字符串对象存储在堆中

NSTaggedPointerString

这个类表示这是字符串的一种指针Tagged Pointer。

Untitled 1.png

引用文章:

上一篇 下一篇

猜你喜欢

热点阅读