OC 属性是new,init开头,编译报错解决办法

本文详细介绍了 Objective-C 中属性的四种主要特质:原子性、读/写权限、内存管理语义及方法名。深入探讨了 nonatomic 特质如何影响同步机制,并解释了 readwrite、readonly、assign、strong 等特质的作用及其应用场景。

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

属性可以拥有的特质分为四类:

  1. 原子性--- nonatomic 特质

    在默认情况下,由编译器合成的方法会通过锁定机制确保其原子性(atomicity)。如果属性具备 nonatomic 特质,则不使用同步锁。请注意,尽管没有名为“atomic”的特质(如果某属性不具备 nonatomic 特质,那它就是“原子的” ( atomic) ),但是仍然可以在属性特质中写明这一点,编译器不会报错。若是自己定义存取方法,那么就应该遵从与属性特质相符的原子性。

  2. 读/写权限---readwrite(读写)readonly (只读)

  3. 内存管理语义---assignstrong、 weakunsafe_unretainedcopy
  4. 方法名---getter=<name> 、setter=<name>

    getter=<name>的样式:

          @property (nonatomic, getter=isOn) BOOL on;

    ( `setter=`这种不常用,也不推荐使用。故不在这里给出写法。)

    setter=<name>一般用在特殊的情境下,比如:

在数据反序列化、转模型的过程中,服务器返回的字段如果以 init 开头,所以你需要定义一个 init 开头的属性,但默认生成的 setter 与 getter 方法也会以 init 开头,而编译器会把所有以 init 开头的方法当成初始化方法,而初始化方法只能返回 self 类型,因此编译器会报错。

这时你就可以使用下面的方式来避免编译器报错:

@property(nonatomic, strong, getter=p_initBy, setter=setP_initBy:)NSString *initBy;

另外也可以用关键字进行特殊说明,来避免编译器报错:

@property(nonatomic, readwrite, copy, null_resettable) NSString *initBy;
- (NSString *)initBy __attribute__((objc_method_family(none)));
  1. 不常用的:nonnull,null_resettable,nullable
### TIM_OC4Init 函数的含义与用途 在嵌入式系统中,`TIM_OC4Init` 是 STM32 标准外设库中的一个函数,用于初始化定时器通道 4(CH4)的输出比较功能。该函数的主要作用是配置 PWM 输出模式、占空比、极性以及输出状态等关键参数,使得对应的 GPIO 引脚能够根据设定的比较值生成特定波形。 此函数通常在 PWM 波形生成、电机控制、LED 调光、电源管理等场景中使用,允许开发者灵活地控制输出信号的时间特性[^1]。它接受两个参数:一个是所使用的定时器实例(如 `TIM2`, `TIM3` 等),另一个是指向 `TIM_OCInitTypeDef` 结构体的指针,该结构体包含输出比较配置信息。 #### 函数原型定义如下: ```c void TIM_OC4Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct); ``` 其中 `TIMx` 表示使用的定时器编号,`TIM_OCInitStruct` 是用户预先填充好的输出比较配置结构体。 #### 示例代码:使用 TIM_OC4Init 配置 PWM 输出 以下是一个典型的初始化流程,展示了如何配置 TIM2 的 CH4 通道以输出 PWM 波形: ```c // 定义并初始化输出比较结构体 TIM_OCInitTypeDef TIM_OCStruct; TIM_OCStruct.TIM_OCMode = TIM_OCMode_PWM1; // 设置为 PWM 模式1 TIM_OCStruct.TIM_OutputState = TIM_OutputState_Enable; // 启用输出 TIM_OCStruct.TIM_Pulse = 500; // 初始比较值(占空比) TIM_OCStruct.TIM_OCPolarity = TIM_OCPolarity_High; // 输出高电平有效 // 初始化 TIM2_CH4 TIM_OC4Init(TIM2, &TIM_OCStruct); // 应用配置到通道4 TIM_OC4PreloadConfig(TIM2, TIM_OCPreload_Enable); // 启用预装载寄存器 ``` 上述代码中,`TIM_OC4Init()` 将配置写入定时器的通道 4 寄存器组,从而决定该通道的行为方式。此外,`TIM_OC4PreloadConfig()` 被调用来启用预装载功能,确保更新比较值时不会导致输出突变,提高 PWM 输出的稳定性。 #### 主要配置项说明: - **`TIM_OCMode`**:设置输出比较模式,常见选项包括 `PWM1` 和 `PWM2`,决定了计数器匹配时输出的状态变化方式。 - **`TIM_OutputState`**:启用或禁用输出。 - **`TIM_Pulse`**:设置比较值,即决定 PWM 波形的高电平持续时间。 - **`TIM_OCPolarity`**:定义输出极性,可选择高电平有效或低电平有效。 通过这种方式,可以在运行时动态修改比较值(例如使用 `TIM_SetCompare4()`),实现对输出波形的实时调整,而无需重新初始化整个通道。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值