美文网首页
iOS - assign 修饰词

iOS - assign 修饰词

作者: AlexLi_ | 来源:发表于2023-09-02 17:37 被阅读0次

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 不同的创建方式,会创建不同的 NSString 对象 →
    • 不同的 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

引用文章:

相关文章

网友评论

      本文标题:iOS - assign 修饰词

      本文链接:https://www.haomeiwen.com/subject/xhpzmdtx.html