OC #import 和 @class 的区别以及对象相互引用的解决方案

S32的进阶之路->3,S32DS新建/删除/导入工程 右击工程名,点击Delect进行工程删除。选中Delect project contents on disk则会彻底删除工程,不选中Delect project contents on disk工程文件会保存在工作空间中。在Improt Projects中选择工程所在文件夹,选中所需要导入的工程,勾选Copy projects into workspace。选中目标示例工程,点击Finish,完成创建工程。导入已有工程,右击右击Project Explorer空白处,选择Import。 阅读详情

1、当两个类相互包含的时候,比如 Person.h 中包含 Book.h,而 Book.h 中又包含 Person.h。这个时候就会出现循环引用的问题,造成程序无限递归,从而导致编译无法通过。
2、解决方案
其中一边不要使用 #import 来引入对方的头文件。
而是使用 @class 类名;来标注这是一个类。这样就可以在不引入对方头文件的情况下,告诉编译器这是一个类。
在 .m 文件中再 #import 对方的头文件,这样就可以使用了
3、#import 和 @class 的区别

  • #import 是将指定的文件内容在预编译的时候拷贝到写指令的地方。
  • @class 并不会拷贝任何内容,只是告诉编译器这是一个类。这样编译器在编译的时候才可以知道这是一个类。

4、在 MRC 的情况下,当两个对象相互引用的时候。(当 A 对象的属性是 B 对象,B 对象的属性是 A 对象。此时如果两边都使用 retain 的话,就会发生内存泄露)
5、解决方案

  • 一端使用 retain,另一端使用 assign,使用 assign 的那一端在 dealloc 方法中就不再需要 release 了。

6、在 ARC 的情况下,当两个对象相互引用的时候,并且属性的类型都是 OC 对象,如果此时两边都使用 strong 的话,就会发生内存泄漏。

7、解决方案

  • 一端使用 strong,另一端使用 assign。
项目篇 | 图书管理系统 | 管理员模块 | 概述 图书管理系统管理员模块概述 阅读详情

相关推荐

STC8单片机低功耗延时优化实践:从循环等待到定时唤醒

本文深入探讨了STC8单片机低功耗延时优化的核心方法,即利用掉电唤醒定时器(WKT)替代传统的循环等待,实现从“空转耗电”到“定时唤醒”的转变。通过实战代码演示了如何编写低功耗延时函数,将待机电流从mA级降至μA级,并分析了精度、唤醒时间等关键权衡点,为电池供电的物联网设备提供了有效的续航优化方案。

pea55的博客 324

OC(Objective-C)学习笔记(一)--import的作用

OC程序在包含头文件时,与C不一样,是用的import,而非include。 import的作用有: 1)与C中include一样,用来拷贝文件的内容; 2)可以防止文件的内容被重复拷贝;

凌桑的自我修养--You are the Eternity 1309

Keil MDK-ARM v5.43a 部署 STM32F103 开发环境全流程

嵌入式开发环境是 Cortex-M 微控制器工程落地的基础支撑,其核心在于编译器链、设备支持包(DFP)与调试驱动的协同一致性。Keil MDK-ARM 作为工业级 ARM Cortex-M 开发套件,依托 Arm Compiler 和 CMSIS 标准,提供从代码编译、外设抽象到实时调试的全栈能力。其技术价值体现在对 STM32 等主流 MCU 的深度适配、高可靠性 SWD 调试支持,以及与 HAL 库、CubeMX 工程的无缝集成。典型应用场景涵盖温湿度传感终端、工业 PLC 子模块及低功耗边缘节点开发

weixin_33750664的博客 888

OC中的数据类型 #import指令 类和对象

IOS学习第17天#import指令1.#import指令? OC中 引入头文件的预处理指令2.在C语言中 多次 #include <"文件名"> 不会有问题 #ifndef xxx_h #define xxx_h #include "头文件.h" #endif 因为C中 通过条件编译指令,来防止了重复包含 在OC中 #import指令 不需要

MA7777777__的博客 854

OpenCV+ArUco实战:如何用Python实现高精度二维码测距(附完整代码)

本文详细介绍了如何使用Python和OpenCV实现基于ArUco标签的高精度单目视觉测距。通过相机标定、标签检测和三维位置估算,结合完整代码示例,帮助开发者在机器人导航、工业自动化等场景中实现厘米级距离测量,并探讨了精度优化与三维可视化等进阶应用。

weixin_29052717的博客 475

CAPL学习之路-关键字

在capl中,关键字具有特殊的含义和用途,因此,不得将关键字用作变量或函数的名称 声明数据类型的关键字 可以用不同的关键字,声明或引用不同类型的数据 byte 声明一个字节的变量 word 声明两个字节的变量 dword 声明四个字节的变量 int 声明两个字节的整数 long 声明四个字节的变量 qword 声明八个字节的变量 char 声明一个字符串 float 声明一个浮点数,8个字节 double 声明一个浮点数,8个字节 定义一个结构体或枚举类型 struct struct Data { .

jasonj333 6108

1.#include、#import、@class的区别?

#include:C 与C++中用来引入头文件的指令,后接“”引入自定义的头文件,后接<>引入库中的头文件。不能防止重复引用头文件,将会报错,处理方法: #ifndef _CLASSC_H #define _CLASSC_H #include "ClassC" #endif #import:OC 中#import是作为#include的改良版本使用的,#import确定只能被导入一次,即可以防止重复导入头文件,也可防止递归导入头文件。 @class:声明一个类,告知编辑器类的

ST88454615的博客 253

4.4 线上vs离线:使用 Langfuse 实现智能体的全方位无死角评估

本文介绍了如何利用Langfuse工具实现AI智能体的全方位评估,包括线上和离线两种评估方式。线上评估通过收集用户实时反馈(如点赞/点踩)来监控真实表现,而离线评估则通过创建标准化数据集进行批量测试和自动评分。文章详细演示了如何为"旅小智"AI应用添加反馈功能、创建评估数据集,并利用Langfuse SDK进行自动化评估和分析。通过这两种评估方式的结合,开发者可以建立数据驱动的AI质量保障体系,实现持续优化和版本迭代。

yonggeit的博客 3311

oc中import和include的区别

在oc中,#include和#import都是引入一个文件,但include多次导入同一个文件会导致重复定义的问题;而import多次导入不会报错,因为import指令会判断之前是否导入过,如果已经导入过就不会再重新导入; 所以,在oc中使用import而不使用include,其实跟c语言中头文件添加  #ifndef __SOMEFILE_H__ #define __SOMEFILE_

beijihukk的博客 842

MoveIt 运动学、运动规划、混合规划、move_group

混合规划是运动规划方法的一个术语,它将异构运动规划器结合起来,以产生更稳健或反应更快的解决方案。这种通用方法在导航领域已经非常成熟,并在导航2等流行项目中成功实施。MoveIt 的混合规划架构结合了一对全局规划器和局部规划器,它们以不同的规划速度和问题范围并行、并发运行。全局规划器的任务是解决全局运动规划问题,这与 “感知-规划-行动 ”应用中使用的规划器非常相似。所使用的规划器算法应该是完整的,因此假定其计算时间相对较慢。此外,全局规划器不要求实时安全,这意味着无法保证规划器在特定期限内找到解决方案。

机器人控制与仿真应用 2131

镜头像差之五——场曲

什么是场曲? 场曲[curvature of field] 物面上所有的点经过系统后,最佳焦点位置不在同一平面上,若这些像点所成的面为曲面,则称为系统有场曲。 与物高二次方、入射光瞳口径一次方成正比的像差。若仅存在场曲,则所有物平面上的点都有相应的像点,但分布在一个球面上;若采用弯成此种形状的底片,则可获得处处清晰的像。此时在理想像平面上,像点呈现为圆斑。 第一张图是最简单也是最容易理解的场曲,也就是对焦点锐利,其余部分逐渐松散,但实际上大多现代镜头的场曲都呈现为图二的形态:对焦点与边缘锐度.

camerall 1万+

【非凡程序员】 OC第八节课 (类的相互调用,字符串和字典的for循环应用)...

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34326558的博客 132

【图像去噪】基于加权核范数最小化算法实现图像去噪附matlab代码

1 简介 WNNM是一种约束矩阵奇异值稀疏性的低秩算法,在NNM理论基础上增加了核范数权重,有效利用了自然图像的先验信息并提高了核范数的灵活性. 2 部分代码 ​clcclear allclose allnSig = 100;O_Img = double(imread('Monarch.png'));​randn('seed', 0);N_Img = O_Img + nSig* randn(size(O_Img)); ..

qq_59747472的博客 3114

OC中 #include、#import、@class 区别

#include         区分 #include 与#include "x.h"的作用         #include :它用于对系统自带的头文件的引用,编译器会在系统文件目录下去查找该文件.          #include "x.h":用户自定义的文件用双引号引用,编译器首先会在用户目录下查找,然后到安装目录中查找,最后在系统文件中查找。         在使用#i

小短裤の夏天 874

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

OC 导入类 #import和@class 区别 .

在Objective-C中,可以使用#import和@class来引用别的类型, 但是你知道两者有什么区别吗? @class叫做forward-class,  你经常会在头文件的定义中看到通过@class的引用, 原因就是当你只用@class来引入一个类时, 编译器知道有这么一个类,也就是说它能识别Engine *engine; 而在implementation文件中,如果

_听雨眠的专栏 938

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Objective-C中#import与@class如何规避多文件结构导致的重复包含

Objective-C中#import如何规避多文件结构导致的重复包含;以及@class作用   C/C++中使用#include来包含头文件,缺点就是同一个头文件可能被包含多次。   Objective-C中使用了#import来包含头文件,优点就是同一个头文件只能包含一次。     #import和#include 功能上一样的,#include

Chen_Yilong的专栏 3152

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

OC 导入类 #import和@class 区别

objective-c中#import和@class的区别 在Objective-C中,可以使用#import和@class来引用别的类型, 但是你知道两者有什么区别吗? @class叫做forward-class,  你经常会在头文件的定义中看到通过@class的引用, 原因就是当你只用@class来引入一个类时, 编译器知道有这么一个类,也就是说它能识别Engine *engi

GUITK的专栏 9920

#include #import @class区别

1、#include : c语言的预处理指令,将文件的内容在编译的时候拷贝到写指令的地方 2、#import :OC的预处理指令,是#include指令的增强版, 将文件的内容在编译的时候拷贝到写指令的地方 特点:同一个文件无论#import多少次 只会包含一次 相当于#include 加上#pragma once, #import指令在包含文件的时候,底层会先判断这个文件是否被包含 如果被包含就会略过 否则才会包含 ...

yang992510244yang的博客 204

OC中@class的理解

当我们再看苹果自己封装的类的时候,经常会看到@class XXX,我们知道@class XXX是告诉编译器有这样一个类,但是这个类里面有什么东西我们不知道。 一般来说,我们在使用某一个类时,即当一个类使用到另一个类时,并且在类的头文件中需要创建被引用的指针时,有两种方法: 1.#import""    2 .   @class  例如: #import"B.h" @interfac

MingerW的专栏 1098

#include,#import,@class的区别

#include #include <> :用于对系统文件的引用,编译器会在系统文件目录下去查找该文件。 #include "xx.h":用于对用户自定义的文件的引用,编译器首先会去用户目录下查找,然后去安装目录,最后去系统目录查找。 注:使用include要注意重复引用的问题: c...

a1250156的博客 166

#include、#import、@class

#include 在C和C++里,用来导入头文件的关键字。#include就是进行简单的复制和粘贴,将目标.h文件中的内容一字不落的拷贝到当前文件中,并替换掉这句include。【在使用#include的时候要注意处理重复引用的问题,这也是objc中#include与#import的区别】 #import 在OC里,用来导入头文件的关键字。#import大部分功能和#include...

m_miao 325

使用#import #include与@class相关知识点

使用#import #include与@class相关知识点 一、#include与#import区别 #include <xxx.h> 和 #import<xxx.h> 用于对系统自带的头文件的引用,编译器会在系统文件目录下查找该文件 #include "xxx.h" 和 #import "xxx.h" 用户自定义的文件用双引号引用,引用时编译器首先会在用户目录下查找,然后去安装目录中查找,最后在系统文件目录中查找 #import和#include同样可以将头文件引入到我们

ForeverDirect的博客 416

#include #import @class三者究竟该用哪个

在OC中,引用文件可以通过#include、#import、@class三种方式,本文将讲解这三种方式的不同之处以及选择方式。 一. #include 1. 在C语言中,我们使用#include来引入头文件。使用#include “xx.h”来引入自定义的头文件,使用#include来引入库中的头文件。 2. 但是#include并不能防止重复引用头文件,如果在文件中,重复引

u014536527的专栏 1762

OC_#import与@class的导入类区别

objective-c中#import和@class的区别 在Objective-C中,可以使用#import和@class来引用别的类型, 但是你知道两者有什么区别吗? @class叫做forward-class,  你经常会在头文件的定义中看到通过@class的引用, 原因就是当你只用@class来引入一个类时, 编译器知道有这么一个类,也就是说它能识别Engine

zimo2013的技术博客 2737

【转】#include,#import,@class的区别

#include #include <> :用于对系统文件的引用,编译器会在系统文件目录下去查找该文件。 #include "xx.h":用于对用户自定义的文件的引用,编译器首先会去用户目录下查找,然后去安装目录,最后去系统目录查找。 注:使用include要注意重复引用的问题: c...

aycj34508的博客 80

oc 中 ID 数据类型 以及 #import 和@class区别 摘要

ID数据类型      通用的指针类型     没有*号     可以指向任何类的对象(设置是nil),而不关心其具体类型     在运行时检查其具体类型     可以对其发送任何(存在的)消息 id是泛类型,可以用来存放各种类型的对象,使用id也就是使用“动态类型”。id 在执行时Objetive-C的执行环境会找出该id所代表原来类型。

JinigW的博客 742
上一篇: OC @property 的参数
下一篇: OC 中的自动引用计数 ARC
same_life
博客等级 码龄7年 25粉丝 66原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值