You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

类扩展中声明的变量是否为强引用?该写法是否合规?

类扩展中实例变量的引用类型与写法答疑

嘿,这两个问题我给你讲得明明白白的:

1. 类扩展里声明的变量是不是都是强引用?

得分两种情况来看:

  • 对于对象类型的变量(比如你写的UILabel *timeLabel):OC里默认的实例变量都是强引用(strong),不管是在类扩展的大括号里,还是类的主@interface块里声明的,只要没显式加__weak、__unsafe_unretained这类修饰符,都是强引用。
  • 对于基本数据类型(比如BOOL isNewUI):这类是值类型,不存在引用计数的概念,所以没有强弱引用的说法,直接存储值就行。

如果想改变对象变量的引用类型,直接加修饰符就行,比如想让timeLabel是弱引用:

@interface ClassA () { 
    __weak UILabel *timeLabel; 
    BOOL isNewUI; 
}
@end

2. 你贴的写法可行吗?

完全没问题!这种在类扩展的大括号里声明实例变量的写法非常常用:

  • 类扩展里的这些变量是类的私有成员,只能在当前类的@implementation里访问,外部类(包括子类)都无法直接访问,刚好用来封装类内部的状态,避免把不必要的细节暴露给外部。
  • 这种写法和在类的主@interface里声明实例变量的语法逻辑一致,只是作用域被限制在了类内部。

内容的提问来源于stack exchange,提问作者Sivrish Thangamani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:11:52