OC 基础知识梳理

一、ViewController的生命周期

- (void)loadView{
    
    [super loadView];
    
    NSLog(@"%s",__func__);
    
}

- (void)viewDidLoad {
    
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    NSLog(@"%s",__func__);
}

- (void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
    NSLog(@"%s",__func__);
    
}

- (void)viewDidAppear:(BOOL)animated{
    [super viewDidAppear:animated];
    NSLog(@"%s",__func__);
}

- (void)viewWillDisappear:(BOOL)animated{
    [super viewWillDisappear:animated];
    NSLog(@"%s",__func__);
}

- (void)viewDidDisappear:(BOOL)animated{
    [super viewDidDisappear:animated];
    NSLog(@"%s",__func__);
}

2021-06-15 20:46:32.215679+0800 TestVC[7923:804814] -[ViewController loadView]

2021-06-15 20:46:32.215922+0800 TestVC[7923:804814] -[ViewController viewDidLoad]

2021-06-15 20:46:32.216450+0800 TestVC[7923:804814] -[ViewController viewWillAppear:]

2021-06-15 20:46:32.271312+0800 TestVC[7923:804814] -[ViewController viewDidAppear:]

2021-06-15 20:47:06.964063+0800 TestVC[7923:804814] -[ViewController viewWillDisappear:]

2021-06-15 20:47:07.493666+0800 TestVC[7923:804814] -[ViewController viewDidDisappear:]

那么一开始就是init-->loadView-->viewDidLoad-->viewWillAppear-->viewDidAppear-->viewWillDisappear-->viewDidDisappear

 

二、OC的关键字

分类属性关键字
原子性atomic nonatomic
读写性wr ro setter getter
内存管理assign weak unsafe_unretain retian strong copy

 

 

 

 

 

原子性

属性关键字用法
atomic编译器会自动生成互斥锁,对setter getter方法进行加锁,可以保证属性赋值和取值是线程安全的,但不包括操作和访问
nonatomic一般属性用nonatomic修饰

 

 

 

 

 

读写性

属性关键字用法
rw可读可写 setter & getter
ro只读 getter 
setter指定生成setter方法名
getter指定生成getter方法名

 

 

 

 

 

 

内存管理

属性关键字用法
assign

1.修饰对象 基本数据类型和对象类型

2.setter方法的实现是直接复制,一般用于基本数据类型

3.修饰基本数据类型:BOOL等

4.修饰对象类型时,不增加其引用计数

5.会产生悬垂指针(悬垂指针:assign 修饰的对象在被释放之后,指针仍然指向原对象地址,该指针变为悬垂指针。这时候如果继续通过该指针访问原对象的话,就可能导致程序崩溃)。

weak

1.只能修饰对象类型

2.ARC下使用

3.修饰弱引用,不增加对象引用计数,可以避免循环引用

4.weak修饰的对象在释放之后,会讲指针置为nil,不会产生悬垂指针

unsafe_unretained

1.可以修饰基本数据类型和对象类型

2.MRC下使用

3.unsafe_unretained会产生悬垂指针

retain

1.MRC下使用

2.修饰强引用,将指针原来指向的旧对象释放掉,同时将新对象的引用计数加1

strong

1.ARC下使用

2.和Retain一样

3.修饰block时,strong相当于copy,而retain相当于assign

copysetter方法的实现时release旧值,copy新值,用于NSString block

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

三、计算机网络七层级

OSI七层网络模型 
应用层与其他计算机进行通讯的应用 telnet http FTP
表示层定义数据格式和加密 ASCII等
会话层定义如何开始控制和结束一个会话:RPC SQl
传输层选择恢复协议,复用数据流的输入,对数据包进行排序,TCP UDP SPX
网络层定义了包的传输,标识结点的逻辑地址,将一个包分解成更小的包:IP IPX
数据链路层定义了单个链路上如何传输数据 ATM FDDI等
物理层定义了有关介质、链接头,帧、帧的使用,电流,编码以及光调制等规范

 

 

 

 

 

 

 

 

 

四、两个子视图找到同一个VC

五、判断block的类型

有Global。Stack。Malloc

没有访问auto变量就是Global,在ARC环境下编译器会自动将栈上的blockcopy到堆上

六、MVVM

MVVM(Model–view–viewmodel)是一种软件架构模式。 MVVM有助于将图形用户界面的开发与业务逻辑或后端逻辑(数据模型)的开发分离开来,这是通过置标语言或GUI代码实现的。 MVVM的视图模型是一个值转换器, 这意味着视图模型负责从模型中暴露(转换)数据对象,以便轻松管理和呈现对象。

七、分类的优缺点

可以为现有的类添加新方法的方式,利用OCRuntime分配机制。

把类的实现分开在不同的文件里面,方便代码管理,创建私有方法的向前引用。向对象添加非正式协议。同时也具有局限性:

只能给某个已有的类拓展方法;不能扩充成员变量,用关联对象添加属性;当分类中方法名和类中的方法名一样分类中的方法名会覆盖原类的方法名;多个方类中存在同名方法,运行时调用最后参与编译的方法会被调用。

八、性能优化着手点

CPU层面  GPU层面 耗电优化  网络优化 定位优化  硬件检测优化 app启动优化 冷启动和 热启动 安装包瘦身

https://www.jianshu.com/p/c51106cbea05

 

<think>好的,用户让我介绍一下STM32定时器的基础知识。首先,我需要确定用户对STM32的了解程度,可能是个刚入门的开发者或者有经验的工程师需要复习。接下来,我应该考虑他们可能需要的细节层次,比如基本概念、不同类型的定时器以及常见应用场景。 用户可能正在学习STM32,或者在做项目时需要用到定时器,所以需要明确的结构和实用信息。我应该从最基础的定时器功能讲起,比如计时、PWM生成、输入捕获等,然后逐步深入不同种类的定时器,如基本定时器、通用定时器、高级定时器的区别和用途。 需要确保术语准确,比如ARR、PSC这些寄存器的作用,以及如何配置它们。同时,举一些例子,比如如何计算定时时间,或者如何生成PWM信号,这样用户能更好地理解。 还要注意避免过于复杂的细节,保持内容简明易懂。用户可能不太清楚定时器之间的差异,所以需要明确说明每种定时器的特点和适用场景。此外,可能还需要提到常见的问题,比如中断配置、时钟源选择等,帮助用户避免常见错误。 最后,检查是否有遗漏的重要知识点,比如高级定时器的死区功能,或者与其他模块的联动应用,确保覆盖用户可能需要的各个方面。同时,提醒用户参考官方资料和例程,以便他们进一步深入学习。</think>好的,我来为您梳理STM32定时器的核心知识体系: 一、定时器核心功能 1. 计时功能 - 基础计时(微秒/毫秒级) - 通过预分频器(PSC)和自动重载寄存器(ARR)实现灵活的时间设置 - 计算公式:定时时间 = (ARR+1)*(PSC+1)/输入时钟频率 2. PWM输出 - 生成占空比可调的方波信号 - 通过捕获/比较寄存器(CCR)控制占空比 - 典型应用:电机控制、LED调光 3. 输入捕获 - 测量脉冲宽度 - 捕获外部信号边沿 - 常见应用:编码器信号处理 4. 输出比较 - 产生精确时间间隔的中断 - 触发特定事件(如DMA传输) 二、STM32定时器分类(以F1系列为例) 1. 基本定时器(TIM6/TIM7) - 仅支持向上计数 - 无外部IO - 主要用途:时基生成、DMA触发 2. 通用定时器(TIM2-TIM5) - 支持向上/向下计数 - 具备输入捕获/输出比较功能 - 可连接外部时钟源 - 典型应用:PWM生成、脉冲计数 3. 高级定时器(TIM1/TIM8) - 包含通用定时器所有功能 - 新增功能: - 互补输出(带死区控制) - 刹车功能 - 编码器接口 - 主要应用:电机控制、电源转换 三、关键寄存器解析 1. CR1:控制寄存器(设置计数方向、使能等) 2. SR:状态寄存器(中断标志位) 3. CNT:当前计数值寄存器 4. DIER:中断使能寄存器 5. CCER:捕获/比较使能寄存器 四、典型配置流程 1. 使能时钟(RCC_APB1/APB2) 2. 配置时基参数(ARR, PSC) 3. 设置工作模式(PWM模式/输入捕获等) 4. 配置中断(如需) 5. 使能定时器 ```c // 示例:PWM配置代码框架 TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; // 时基设置 TIM_TimeBaseStructure.TIM_Period = 999; // ARR值 TIM_TimeBaseStructure.TIM_Prescaler = 71; // PSC值 TIM_TimeBaseStructure.TIM_ClockDivision = 0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); // PWM通道设置 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = 500; // CCR值 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OC3Init(TIM3, &TIM_OCInitStructure); TIM_Cmd(TIM3, ENABLE); ``` 五、应用注意事项 1. 时钟树配置:注意APB总线分频对定时器时钟的影响 2. 中断优先级:实时性要求高的任务需设置合适优先级 3. 寄存器访问:使用库函数时注意参数有效性检查 4. 电平匹配:PWM极性设置与实际电路配合 5. 死区时间:电机控制中必须配置合适的死区时间(高级定时器) 建议结合STM32CubeMX进行可视化配置,并参考官方《参考手册》中定时器章节获取更详细的寄存器说明和时序图。实际开发中应根据具体型号的芯片手册确认定时器资源分配和功能支持。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值