美文网首页
iOS:Class类型属性的存储策略

iOS:Class类型属性的存储策略

作者: 丶墨墨丶 | 来源:发表于2021-08-22 02:19 被阅读0次

1、前言

有些情况下,我们需要对一个类增加这样一个成员属性,用来保存一个类,类似这样;

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

@interface CustomObject : NSObject

/// 保存类
@property (nonatomic, strong) Class classNmae;

@end

NS_ASSUME_NONNULL_END

2、Class属性内存管理策略选用分析

但是我们需要考虑Class成员属性的存储策略strong/assign;
strong:使用strong内存管理策略,内存开辟在堆区,申请和释放由开发者管理,有引用计数的概念;
assign:使用assign内存管理策略,内存开辟在栈区,申请和释放由系统自动管理,引用时引用计数器不会+1;
下边这两种策略在程序上效果一样,都不会报错、警告,运行正常;

@property (nonatomic, strong) Class classNmae;
@property (nonatomic, assign) Class classNmae;

3、Class在OC中定义

Class在OC中定义

typedef struct objc_class *Class;

objc_class 结构体定义:

struct objc_class : objc_object { 
  ...
}
/// Represents an instance of a class.
struct objc_object {
    Class _Nonnull isa  OBJC_ISA_AVAILABILITY;
};

可以看出类对象同其他类型对象一样,都有isa指针成员。

4、总结

类对象在程序启动时,会自动为我们创建程序定义的每个类的一个类对象。

Class对象在程序中只存在一份,这整个程序运行期间都不会释放,所以我们不用关心类对象引用计数器的变化,对于Class不管使用strong还是assign修饰,在属性指向区域的内存管理上效果都是一样。

相关文章

  • iOS:Class类型属性的存储策略

    1、前言 有些情况下,我们需要对一个类增加这样一个成员属性,用来保存一个类,类似这样; 2、Class属性内存管理...

  • swift属性

    swift有三种属性:1、存储属性 2、计算属性 3、类型属性 存储属性//1、存储属性class Perso...

  • 7.属性与方法

    存储属性与计算属性,类属性类方法class/static,使用let和var接收值类型或引用类型变量的区别,属性监...

  • swift计算属性和存储属性

    //计算属性 class MyClass0{ //存储属性 不能用class修饰存储属性,编译报错 sta...

  • 2022-09-23爱回收

    一面 【1、class与static修饰类的 时候】 static修饰存储属性、计算属性、类型方法,且修饰的方法不...

  • (十九) [Swift]你了解Swift中的属性吗?

    1.存储类型的属性的初始化 存储类型 存储类型的属性的初始化,存储类型的属性,在结构体或者对象创建的时候必须保证初...

  • 2018-08-26

    使用spring如何给对象注入Class类型的属性 使用spring如何给对象注入Class类型属性 POJO对象...

  • Swift进阶(三)--- 属性

    Swift的属性 在swift中,属性主要分为以下几种: 存储属性 计算属性 延迟存储属性 类型属性 一:存储属性...

  • swift的Struct学习-1

    Struct和Class的区别 Struct是值类型,存储于栈区,所以少量内存用结构体 Class是引用类型,存储...

  • python“对象”的初印象

    自定义数据定义类型 class Author: 数据(存储)定义类型 class DataDefined: 数据服...

网友评论

      本文标题:iOS:Class类型属性的存储策略

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