OC中 instancetype、id、NSObject的区别

本文深入探讨了Objective-C中的instancetype与id之间的区别,并解释了它们各自的应用场景,强调了instancetype如何作为id的增强版,提供更具体的类型信息,减少编译错误,提升代码的可读性和维护性。

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

1、instancetype只能用于方法的返回类型,而id用处和NSObject *类似。
 
2、instancetype会告诉编译器当前的类型,这点和NSObject *类似,但id对于编译器却是无类型的,调用任何方法不会给出错误提示。
 
3、对于init方法,id和instancetype是没有区别的。因为编译器会把id优化成instancetype。当明确返回的类型就是当前Class时,使用instancetype能避免id带来的编译不出的错误情况。
 
4、NSObject Class和id都是仅包含了一个Class isa。但NSObject 包含了更多方法的定义。
 
5、id和instancetype都能省去具体类型,提高代码的通用性。而这是NSObject *不及的。
 
6、个人认为:instancetype是对id和NSObject *两者不足的一个补充。
 


参考于      http://www.cnblogs.com/simalone/p/3549950.html?utm_source=tuicool&utm_medium=referral  
### OC语言的命名规则与格式规范 Objective-C(简称OC)是一门面向对象编程语言,它在C语言的基础上扩展了面向对象的功能。OC语言的命名规则和格式规范对于编写可读性高、易于维护的代码至关重要[^1]。 #### 1. 类名命名规则 类名通常以大写字母开头,并采用**驼峰式命名法**(CamelCase)。例如,`NSString` 或 `UIViewController`。这种命名方式有助于区分类名与其他标识符。此外,开发者通常会在自定义类名前加上前缀以避免命名冲突。例如,`MYCustomViewController` 中的 `MY` 是前缀[^2]。 #### 2. 方法命名规则 方法名应清晰描述其功能,通常由多个单词组成,首单词以小写字母开头,后续单词首字母大写。例如,`addObject:` 或 `removeAllObjects`。如果方法包含参数,则参数名应紧随动词之后,形成自然语言风格的方法签名。例如: ```objc - (void)insertObject:(id)object atIndex:(NSUInteger)index; ``` 这种方法签名表示插入一个对象到指定索引位置,参数名增强了代码的可读性[^3]。 #### 3. 变量命名规则 变量名也遵循驼峰式命名法,但首字母小写。例如,`objectCount` 或 `currentPosition`。局部变量和实例变量可以使用类似命名方式,但实例变量通常以下划线 `_` 开头以区别于普通变量。例如,`_name` 或 `_age`[^4]。 #### 4. 常量命名规则 常量通常全部大写,单词之间用下划线 `_` 分隔。例如,`MAX_VALUE` 或 `DEFAULT_TIMEOUT`。这种方式使常量在代码中更加显眼,便于识别[^5]。 #### 5. 枚举类型命名规则 枚举类型的值通常以大写字母开头,并使用前缀标明所属类别。例如,`NSFontTraitMask` 中的 `NS` 表示该枚举属于 Foundation 框架。枚举值则采用全大写形式,如 `UIBarPositionTopAttached`[^6]。 #### 6. 协议命名规则 协议名通常以“ing”结尾,表示某种行为或能力。例如,`NSCopying` 或 `UITableViewDataSource`。这种命名方式直观地表达了协议的功能[^7]。 #### 7. 错误处理命名规则 错误相关的变量或方法通常以 `Error` 结尾。例如,`NSError *error` 或 `handleError:`。这种命名方式明确指出了变量或方法与错误处理相关[^8]。 ### 示例代码 以下是一个符合OC命名规范的简单类定义: ```objc @interface MYPerson : NSObject @property (nonatomic, strong) NSString *firstName; @property (nonatomic, strong) NSString *lastName; - (instancetype)initWithFirstName:(NSString *)firstName lastName:(NSString *)lastName; - (void)sayHelloWithError:(NSError **)error; @end ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值