gpt4 book ai didi

Objective-C 类扩展

转载 作者:太空狗 更新时间:2023-10-30 03:08:39 25 4
gpt4 key购买 nike

作为一个相当新的 Objective-C 程序员(具有 4 年的 Java 经验),我似乎很难理解何时使用类扩展。根据我的理解(如果我错了,请纠正我),类别和扩展之间的主要区别是扩展希望您在主要实现中实现方法,而对于类别,它可以在另一个实现中.似乎人们主要将扩展用于私有(private)方法。

这是我的第一个问题。使用类扩展来声明私有(private)方法与根本不声明它有什么区别(在这两种情况下似乎都在运行中编译)? (示例 1 与 2)

示例 1

@interface Class()
-(void) bar;
@end

@implementation Class
-(void) foo {
[self bar];
}

-(void) bar {
NSLog(@"bar");
}
@end

示例 2

@implementation Class
-(void) foo {
[self bar];
}

-(void) bar {
NSLog(@"bar");
}
@end

第二个问题:在扩展中声明ivars和直接在实现中声明有什么区别? (示例 3 与 4)

示例 3

@interface Class() {
NSArray *mySortedArray;
}
@end

@implementation Class
@end

示例 4

@implementation Class
NSArray *mySortedArray;
@end

我有一个关于编码约定的最后一个问题:什么时候应该在变量名前加下划线 (_)?

谢谢

最佳答案

类扩展中的方法

以前从来没有不需要声明私有(private)方法的情况。直到最近,您还需要在某个地方声明您的私有(private)方法,而且大多数人选择类扩展来这样做。从 Xcode 4.4(我相信)开始,编译器足够聪明,可以确定哪些方法在该实现中是私有(private)的,无需在其他地方声明它们。

类扩展中的变量

至于示例 3 和示例 4,请小心。在类扩展中,变量是该类的实例变量(示例 3)。示例 4 声明了一个全局变量(因为它遵循 C 中的全局变量语义)。坚持使用示例 3 作为您的私有(private)实例变量。

编码约定

至于编码约定,由开发人员/团队决定是否使用下划线。我们的团队使用 m_ 作为私有(private)实例变量。苹果在他们的documentation suggest使用下划线(这是合成属性的基础实例变量的命名风格)。重要的是,在整个代码中保持一致。

关于Objective-C 类扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14675201/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com