OC之@class

假设有两个类,一个是Card,一个是Person,当Card中包含Person,我们就需要在Card前加上#import “Person.h“。如果此时Person中再包含Card的话,我们就又得在Person类前加上#import “Card.h”。这时再编译运行就会出现故障,因为编译运行会导致两个类不停得拷贝对方,导致报错。

这是可以在两个类前用:

@class 类

就可以避免这种问题,比如在Person中用@class Card;代替#import “Card.h”。在Card中用@class Person;代替#import “Person.h”。但是这样还是有一个问题,它仅仅告诉编译器某个名称是一个类,并没有把这个类中的所有东西拷贝过来。在实际开发中:

(1) 在.h文件中用@class来声明类

(2) 在.m文件中用#import来包含类的所有东西

@class 和#import的区别(高频面试题):

对于循环依赖关系来说,比如A类引用B类,同时B类也引用A类:

这种代码会报错,当时用@class在两个类中互相声明,就不会编译报错。

(1)#import方式会包含被引用类的所有信息,包括被引用类的变量和方法;@class方式只是告诉编译器在A.h文件中B *b只是类的声明,具体这个类有什么信息,这里不需要知道,等实现文件中真正要用到时,才会去查看B类中信息。

(2)如果有上百个头文件都#import了同一个文件,或者这些文件依次被#import,那么一旦最开始的头文件稍有改动,后面引用这个文件的所有类都要重新编译一遍,这样对效率的影响也是可想而知的。相对来讲,使用@class方式就不会出现这种问题了。

(3)在.m实现文件中,如果需要引用到被引用类的尸体变量或者方法时,还需要使用#import方式引用被引用类。

时间: 2024-08-17 20:07:52

OC之@class的相关文章

WKWebView与Js实战(OC版)

前言 上一篇专门讲解了WKWebView相关的所有类.代理的所有API.那么本篇讲些什么呢?当然是实战了! 本篇文章教大家如何使用WKWebView去实现常用的一些API操作.当然,也会有如何与JS交互的实战. 如果还没有阅读过WKWebView精讲(OC版),请先阅读,不然有可能看不懂下面所讲的内容. 效果图 通过本篇文章,至少可以学习到: OC如何给JS注入对象及JS如何给IOS发送数据 JS调用alert.confirm.prompt时,不采用JS原生提示,而是使用iOS原生来实现 如何监

WKWebView API精讲(OC)

前言 鉴于LL同志对笔者说:"能不能写个OC版本的WKWebView的使用教程?",还积极打赏了30RMB,笔者又怎么好意思拒绝呢,于是才有了下文. 所有看到本篇文章的同志们,应该要感谢LL同志,更要向LL同志学习,积极打赏! WKWebView 看看WKWebView的头文件声明: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37

OC基础之访问修饰符

做C#.Java的人都知道private.protect.public这些访问权限,在OC中看项目基本都没用到这些,昨天就好奇的仔细了解了下,其实OC中也是有这些访问权限的修饰.说实话有好多做过编程的也未必对这些基础知识了解. 1.分清属性和变量的区别 属性是对变量的封装,可以通过属性(get\set)方法来访问变量.例如有一些变量(例如年龄.性别等)在赋值或取值要满足一些条件,那如何解决呢? 于是属性就应运而生,用它的get.set方法来解决这个问题 ,这也是面向对象中封装的体现. 2.pri

设计模式之观察者模式(关于OC中的KVO\KVC\NSNotification)

学习了这么久的设计模式方面的知识,最大的感触就是,设计模式不能脱离语言特性.近段时间所看的两本书籍,<大话设计模式>里面的代码是C#写的,有一些设计模式实现起来也是采用了C#的语言特性(C#的API,抽象类,在OC中是没有抽象类.没有多继承关系),<设计模式之禅>里面的代码是JAVA写的,与OC差距也是比较大. 但是我想,这些都不是问题,学习设计模式主要学习的是其中的思想,并将之改造成自己所熟悉语言的模式,大同小异.所需要注意的是,在学习的过程中,将之与语言结合起来,多思考.多实践

ios-新人请教OC中self用法

问题描述 新人请教OC中self用法 新人小白,求教下面的获取文本框.标签的文本属性为什么都要用self.num1.text,self.resultLabel.text, 不能直接用num1.text,resultLabel.text??? #import "HMViewController.h" @interface HMViewController () @property (nonatomic, weak) IBOutlet UITextField *num1; @propert

016-类与对象-OC笔记

学习目标 1.[理解]对象在内存中的存储 2.[理解]nil和NULL 3.[了解]#pragma mark分组导航标记 4.[理解]方法与函数 5.[掌握]多文件开发 6.[掌握]对象和方法 7.[掌握]对象和属性 一.对象在内存中的存储 类加载: 当程序启动时,会加载项目中所有的类和分类,而且加载后会调用每个类和分类的+load方法,而且只会调用一次.并且类一旦加载到内存,就不会被回收,直到程序结束的时候才会被回收.这个过程就叫做类加载. 当第一次使用某个类创建对象的时候,就会调用当前类的+

字符串 记录 存储- oc中字符串存储的问题 在线等

问题描述 oc中字符串存储的问题 在线等 (IBAction)tapButton:(id)sender { NSString *title=[sender titleForState:UIControlStateNormal]; self.label.text=title; } 我想做一个计算器,然后用这个方法获取了btoon 上的字符串,但是点击第二次,第三次的时候之前获取的字符串呗覆盖了,这个问题怎么解决?? 解决方案 可以考虑用个数组或者List把每次都记录下来 解决方案二: 具体怎么实现

OC——第五天NSSArray&amp;nbsp;/NSDicti…

1.oc中常用的集合(容器)有: 1.NSArry 数组:2.NSDicitionary 字典:3.NSSet 集(不常用)     数组:NSArry 继承自NSObject ,不可变的数组,用于管理一系列对象的一个有序的集合:注意:数组中只能存放对象类型,虽然数组中存储的内容不能修改,但是数组指针是可以重指向的;   ============================================== 总结:NSArray NSDictionary NSSet     1. NSAr

015-OC基础语法-OC笔记

学习目标 1.[了解]Objective-C语言简介 2.[掌握]第一个OC程序 3.[掌握]OC中的字符串 4.[熟悉]OC中的一些玩意 5.[了解]面向过程与面向对象 6.[掌握]类的声明和实现 7.[掌握]类的方法 一.Objective-C语言简介 Objective-C简称Obj-C或者OC,Objective的意思就是面向对象的.OC其实就是在C语言的基础之上,封装了一层面向对象的语法,他并不是一门全新的编程语言.OC是Mac OS X系统和iOS系统的主要开发编程语言,当然马上要被

OC笔记-2

1.增加的类型 id类型,可以认为是NSObject * 或者 void * nil类型,等同于null,表示一个目标的指针 2.OC类分为2个文件 .h 文件存放类,函数申明 .m 文件放类的具体实现 3.类申明使用关键字 @interface  @end  来申明 类实现使用关键字 @implementation @end  来实现 "+" 表示类的方法 "-"  表示对象的方法 4.1类申明 <Dog.h> #import <Fundatio