iOS开发细碎知识点总结二

本文详细介绍了iOS开发中的struct与class的区别,包括它们在栈和堆的分配、继承、初始化、变量处理等方面的差异,并对比了在Swift、Objective-C和C/C++中的特性。此外,还讨论了iOS中的事件传递与响应链,包括触摸事件的处理流程、数组的区别以及调试技巧。最后,提到了iOS开发中涉及的其他知识点,如观察者模式、定时器、UIView与CALayer的关系、HTTPS加密流程以及SDK开发注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

struct和class的区别

我们先了解栈和堆的区别:
1.栈的特点: 分配空间小 但是存在栈上的数据访问效率高。
2.堆的特点: 分配空间相对较大, 但是数据访问相对于栈,效率底下。
swift中struct与的class的区别
1.class是引用类型,struct是值类型。struct分配在栈中,class分配在堆中。二者本质区别:struct是值拷贝(深拷贝),class是引用拷贝(浅拷贝)。
2.类允许被继承,结构体不允许被继承。
3.property的初始化不同,class在初始化时不能直接把property放在默认的constructor的参数里,而是需要自己创建一个带参数的constructor;而struct可以,把属性放在默认的constructo参数里。
4.变量
swift的可变内容和不可变内容用var和let来甄别,如果初始化为let的变量再去修改会发生编译错误,struct遵循这一特性,class不存在这样的问题。
5.mutating function
struct和class的差别是struct的function要改变property的值的时候要加上mutating,而class不用。
OC语言中,struct与的class的区别:
共同点:
都可以将多个数据封装为一个整体
不同点:
1.类可以添加方法,结构体不可以
2.结构体在栈区,类在堆区
3.结构体是值类型,类是引用类型
4.类可以继承
使用场景:
1.如果封装的不仅有数据还有方法,只能使用类,
2.不涉及到方法的前提下:如果属性较少,就定义为结构体,存放栈中,方便调用,如果属性较多,就定义为类。

C语言中,struct与的class的区别:
struct只是作为一种复杂数据类型定义,不能用于面向对象编程。
C++中,struct和class的区别:
C++ 中保留了C语言的 struct 关键字,并且加以扩充,struct 类似于 class,既可以包含成员变量,又可以包含成员函数。
C++中的 struct 和 class 基本是通用的,唯有几个细节不同:
1.使用 class 时,类中的成员默认都是 private 属性的;而使用 struct 时,结构体中的成员默认都是 public 属性的。
2.class 继承默认是 private 继承,而 struct 继承默认是 public 继承。
3.class 可以使用模板,而 struct 不能。
2.OC中的Array和Swift中的Array区别
Array是Swift中的结构体类型(struct), 属于是值类型.
NSArray是OC中的类型, 属于引用类型.
3.介绍一下观察者模式
观察者模式(Observer Pattern):定义对象间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。
在IOS中典型的推模型实现方式为NSNotificationCenter和KVO。
4.在一个app中间有一个button,在你手触摸屏幕点击后,到这个button收到点击事件,中间发生了什么

  1. 设备将touch到的UITouch和UIEvent对象打包, 放到当前活动的Application的事件队列中
  2. 单例的UIApplication会从事件队列中取出触摸事件并传递给单例UIWindow
  3. UIWindow使用hitTest:withEvent:方法查找touch操作的所在的视图view

5.iOS事件传递与响应链
响应者链概念:响应链是由第一响应者,到application对象以及中间所有响应者一起组成的。
第一响应者 ->superView ->window –> Application –> AppDelegate
1.需要思考的点:

  1. 寻找第一响应者的过程其实只判断该视图是否具有响应触摸事件的能力,但是并没有判断是否可以响应该event。
  2. 第一响应者对event的具体处理,是在事件响应的过程中进行判定的。

2.事件的传递
触摸事件的传递从父控件传递到子控件.
1.每当手指接触屏幕,操作系统会把事件传递给当前的 App。 2.在 UIApplication接收到手指的事件之后,就会去调用`UIWindow的hitTest:withEvent:,看看当前点击的点是不是在window内,如果是则继续依次调用其 subView的hitTest:withEvent:方法,直到找到最后需要的view。

科普:iOS事件分三种

Touch Events(触摸事件)
Motion Events(运动事件,比如重力感应和摇一摇等)
Remote Events(远程事件,比如用耳机上得按键来控制手机)

6、iOS调试技巧
1.断点调试
2.Analyze分析器
Analyze分析器是一种静态的工具,可以对我们的程序进行分析,找出我们未使用的变量,或一些死存储。在Product–>Analyze打开
3.Profile检查器
在Product–>Profile中打开
4.lldb命令调试
Xcode中使用llvm编译器,公认为最好的C、C++、OC、Swift编译器。而lldb是llvm中的调试器。
5.NSLog打印
6.视图调试
7.iOS开发定时器
请查看该博主定时器讲解
三种方案解决定时器的循环引用
补充:CADisplayLink在屏幕刷新时调用
8.UIView和CALayer之间的关系
UIView是iOS系统中界面元素的基础,UIView本身更像是一个CALayer的管理器,CALayer作为一个跨平台框架(OS X和iOS)QuatzCore的类,iOS系统为了处理用户交互事件(触屏操作)用UIView封装了一次CALayer,UIView本身负责处理交互事件,其持有一个Layer,用来负责绘制这个View的内容。而我们对UIView的和绘制相关的属性赋值和访问的时候(frame、backgroundColor等)UIView实际上是直接调用其Layer对应的属性(frame对
应frame,center对应position等)的getter和setter。
1.CALayer 基于 QuartzCore 框架,UIView 基于 UIKit 框架
2.CALayer是直接继承自NSObject的,而UIView是直接继承自UIResponder的。所以、相比于CALayer来说、UIView多了一个事件处理功能、也就是说、CALayer是不能处理用户的触摸事件的、而UIView可以。
9.ios开发动画
显式动画是指用户自己通过beginAnimations:context:和commitAnimations创建的动画。
隐式动画是指通过UIView的animateWithDuration:animations:方法创建的动画。
细微区别:使用隐式动画后,View会暂时不能接收用户的触摸、滑动等手势。

iOS 动画主要是指 Core Animation 框架
在这里插入图片描述
平时常用的动画,如基础动画(CABasicAnimation)、关键帧动画(CAKeyframeAnimation)、组动画(CAAnimationGroup)、过渡动画(CATransition)。
1.基础动画(CABasicAnimation)
基础动画主要提供了对于CALayer对象中的可变属性进行简单动画的操作。比如:位移、旋转、缩放、透明度、背景色等。
2. 关键帧动画( CAKeyframeAnimation )
CAKeyframeAnimation 和 CABasicAnimation 都属于CAPropertyAnimatin 的子类。不同的是 CABasicAnimation 只能从一个数值(fromValue)变换成另一个数值(toValue),而 CAKeyframeAnimation 则会使用一个数组(values) 保存一组关键帧, 也可以给定一个路径(path)制作动画。
<

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值