Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 是否为实现文件中的私有方法使用类别?_Iphone_Objective C_Ios_Categories - Fatal编程技术网

Iphone 是否为实现文件中的私有方法使用类别?

Iphone 是否为实现文件中的私有方法使用类别?,iphone,objective-c,ios,categories,Iphone,Objective C,Ios,Categories,我真的不明白在appDelegate中写一个“category”的意义,例如,只是为了添加一个似乎是“private”的方法。我们为什么要这样做?我真的不明白为什么在实现文件中“隐藏”或“存储”这个私有方法很重要,如本例所示: #import "LetsMakeAThreadAppDelegate.h" @interface LetsMakeAThreadAppDelegate (Static) - (void)backgroundThinking; @end @implement

我真的不明白在appDelegate中写一个“category”的意义,例如,只是为了添加一个似乎是“private”的方法。我们为什么要这样做?我真的不明白为什么在实现文件中“隐藏”或“存储”这个私有方法很重要,如本例所示:

#import "LetsMakeAThreadAppDelegate.h"

@interface  LetsMakeAThreadAppDelegate (Static)
    - (void)backgroundThinking;
@end

@implementation LetsMakeAThreadAppDelegate
...
你有什么建议吗? 谢谢
Paul

类别(在私有方法的上下文中):

目标C不提供任何预定义的方法来声明私有方法。因此,使用类别来声明它们

如果将类别添加到类(不一定是同一个类)的实现(.m)文件内的类,则在类别内声明的方法对其他类将不可见,因为它们是在实现文件内声明的,而不是在头(.h)文件内声明的。因此,这些方法将成为声明它们的类的私有方法

但是,如果类别添加到.h文件中,则其他类只需导入header.h文件即可访问类别中声明的方法。无论如何,在这种情况下导入文件并没有任何魔力。我只是不显示“可能不响应选择器”警告。

类别(在私有方法的上下文中):

目标C不提供任何预定义的方法来声明私有方法。因此,使用类别来声明它们

如果将类别添加到类(不一定是同一个类)的实现(.m)文件内的类,则在类别内声明的方法对其他类将不可见,因为它们是在实现文件内声明的,而不是在头(.h)文件内声明的。因此,这些方法将成为声明它们的类的私有方法


但是,如果类别添加到.h文件中,则其他类只需导入header.h文件即可访问类别中声明的方法。无论如何,在这种情况下导入文件并没有任何魔力。我只是抑制了“可能不响应选择器”警告。

隐藏方法的原因有很多,但这一切(imho)归结为两个词:“编程风格”

  • 虽然您仍然可以向对象发送一条调用隐藏方法的消息,但您将收到一条警告,指出该对象可能无法理解它。这可以用来提醒您正在调用一个从未打算从另一个对象调用的方法

  • 隐藏“主力”方法还可以增加代码完成建议列表的整洁度,从而更容易快速找到正确的方法

  • 如果您在团队中工作或打算共享您正在编写的代码,那么隐藏除与类接口所需的方法之外的所有方法可能会显著改善工作条件。虽然您可能不想隐藏实际的代码,但它有助于防止队友使用方法,这些方法的结果在上下文之外使用时是未定义的。这样,队友只需要了解类的接口,而不是能够使用它的内部结构

  • 最后但并非最不重要的一点是,我发现在适当的时候花时间隐藏方法也有助于(我)减少我编写的意大利面代码的数量,因为它迫使我重新考虑——这个方法实际上做了什么?同样的功能在其他地方有用吗?我是否应该将它的一些代码包装到一个单独的实用程序类中,以便更容易重用它


当然,如果你非常有纪律,没有认真的计划阶段就不会尝试/编写代码,那么这些都与你无关。

隐藏方法的原因有很多,但这一切(imho)归结为两个词:“编程风格”

  • 虽然您仍然可以向对象发送一条调用隐藏方法的消息,但您将收到一条警告,指出该对象可能无法理解它。这可以用来提醒您正在调用一个从未打算从另一个对象调用的方法

  • 隐藏“主力”方法还可以增加代码完成建议列表的整洁度,从而更容易快速找到正确的方法

  • 如果您在团队中工作或打算共享您正在编写的代码,那么隐藏除与类接口所需的方法之外的所有方法可能会显著改善工作条件。虽然您可能不想隐藏实际的代码,但它有助于防止队友使用方法,这些方法的结果在上下文之外使用时是未定义的。这样,队友只需要了解类的接口,而不是能够使用它的内部结构

  • 最后但并非最不重要的一点是,我发现在适当的时候花时间隐藏方法也有助于(我)减少我编写的意大利面代码的数量,因为它迫使我重新考虑——这个方法实际上做了什么?同样的功能在其他地方有用吗?我是否应该将它的一些代码包装到一个单独的实用程序类中,以便更容易重用它


当然,如果您非常有纪律,并且在没有认真规划的情况下不会尝试/编写代码,那么所有这些都与您无关。

好的,多亏了Toastor,我可能很久没有使用它了,我以前有很多东西要学;)谢谢谢谢Toastor,我可能很长时间没用这个了,我以前有很多东西要学;)谢谢