gpt4 book ai didi

ios - 关于 .h 和 .m 文件(如何管理)

转载 作者:行者123 更新时间:2023-12-01 17:20:52 25 4
gpt4 key购买 nike

就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the help center寻求指导。




9年前关闭。




嘿有经验的程序员!

我想问你一些关于干净代码的事情:)

我想保持我的代码干净并使它变得更好,所以这就是我的问题:

1)我应该把#imports放在哪里?
我的原则:(而且我认为它们不好)

  • #import 框架应始终位于 .h
  • #import .h 文件应始终位于 .m
  • .h 文件应该只有@class,而不是导入(不包括 UIKit 等框架)
  • 代表应该在.m
    @interface ViewController() <UIAlertViewDelegate> 
    @end

  • 2)我应该把我的实例变量放在哪里?
  • 私有(private)变量和 protected 变量必须在 .m
  • 公共(public)必须在 .h

  • 3)我应该把我的方法放在哪里?
  • 公开在 .h
  • 私有(private).m
    (是的,我知道我的“私有(private)方法”并不是真正私有(private)的,只是隐藏了)

  • (顺便说一句,这很明显)

    4)#defines 呢?
  • 全局 - 始终在 .h
  • 仅在该类中使用 - 始终在 .m


  • 5)我应该把 NSNotification 全局标识符放在哪里以及如何组织它们
  • #define NSNotificationDataSourceDidLoadData @"NSNotificationDataSourceDidLoadData"在将发送此通知的类中的 .h 文件中

  • 但 ....
  • 苹果在 .h 文件中有很多私密的东西
  • 在大多数情况下,我的 .h 文件只是.. EMPTY :)

  • 一年前我遇到了另一种情况 - 一切在.h中,但我认为这也很糟糕

    该怎么办?你使用什么原则?
    谢谢!

    那是关于编码风格的问题,而不是关于“如何使其可编译”的问题

    最佳答案

    这是我的做法:

  • 平常的#import <Foundation/Foundation.h>#import <UIKit/UIKit.h>进入 .pch 文件。没有头文件或实现文件再次执行这些导入(使 iOS 和 Mac OS X 之间的代码共享更容易一点)。
  • 在 .h 文件中:
  • 仅在绝对必要时才导入其他 .h 文件,例如因为它们定义了类以外的类型(枚举、结构、具有 typedef 的所有内容),然后在当前 .h 文件中使用这些类型。
  • 类是前向声明的 (@class Foo;) 以避免拉入其他 .h 文件。
  • 接口(interface)只包含其他类可以访问的东西!这里没有私有(private)元素!
  • 在 .m 文件中:
  • 包括您需要的所有 .h 文件。但仅此而已 ;-)
  • 私有(private)实例变量和属性在类扩展 (@interface Foo ()) 中定义。
  • 私有(private)方法不再需要“前向声明”,所以不要这样做。

  • 在极少数情况下,一个类包含一些类应该访问但“普通”用户不应该访问的东西,我创建 foo_protected.h具有定义“ protected ”方法的类类别的 header 。

    关于 #define 的一句话s:尽可能避免它们。使用 const变量或 enum s 如果可能的话,因为额外的类型信息可以帮助编译器以这种方式捕获更多错误。例如,使用 enum s 有一个很好的优势,如果你有一个 switch,你会得到一个警告。但没有处理 enum 的所有值.如果您添加一个新值,您将在忘记处理它们的任何地方收到警告,这是您使用 #define 所没有的。 s。

    关于ios - 关于 .h 和 .m 文件(如何管理),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16218047/

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