Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.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
Ios 关于.h和.m文件(如何管理)_Ios_Objective C - Fatal编程技术网

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

Ios 关于.h和.m文件(如何管理),ios,objective-c,Ios,Objective C,嘿,有经验的程序员 我想问你一些关于干净代码的问题:) 我想保持我的代码整洁,让它变得漂亮,所以这就是我的问题: 1) 我应该把进口商品放在哪里? 我的原则:(我不认为它们是好的) #导入框架应始终位于.h中 #导入.h文件应始终使用.m格式 .h文件应该只有@class,而不是imports(不包括UIKit等框架) 代表应在.m @interface ViewController() <UIAlertViewDelegate> @end @interface ViewCon

嘿,有经验的程序员

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

我想保持我的代码整洁,让它变得漂亮,所以这就是我的问题:

1) 我应该把进口商品放在哪里? 我的原则:(我不认为它们是好的)

  • #导入框架应始终位于.h中
  • #导入.h文件应始终使用.m格式
  • .h文件应该只有@class,而不是imports(不包括UIKit等框架)
  • 代表应在.m

    @interface ViewController() <UIAlertViewDelegate> 
    @end
    
    @interface ViewController()
    @结束
    
2) 我应该把实例变量放在哪里

  • 私有变量和受保护变量必须以.m为单位
  • 公共必须在
3) 我应该把我的方法放在哪里

  • 公共图书馆
  • 私家车 (是的,我知道我的“私有方法”不是真正私有的,只是隐藏的)
(顺便说一句,这很明显)

4) 那么#定义呢

  • 全局-始终在.h中
  • 仅在该类中使用-始终在.m中
5) 我应该将NSNotification全局标识符放在哪里以及如何组织它们

  • #在将发送此通知的类的.h文件中定义NSNotificationDataSourceDidLoadData@“NSNotificationDataSourceDidLoadData”
但是

  • 苹果在.h文件中有很多私人物品
  • 在大多数情况下,我的.h文件只是。。空:)
一年前,我遇到了另一种情况-一切都在.h中,但我认为这也很糟糕

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


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

就个人而言,我认为答案相当简单。现在实例变量可以在
@实现中声明,属性和协议采用可以在.m文件的类扩展中声明,我不需要在.h文件中放任何我不需要放在那里的东西。

我个人认为答案很简单。既然实例变量可以在
@实现中声明,属性和协议采用可以在.m文件的类扩展中声明,我就不必在.h文件中放任何我不必放在那里的东西了。

我是这样做的:

  • 通常的
    #import
    #import
    进入.pch文件。没有头文件或实现文件再次执行这些导入(使iOS和Mac OS X之间的代码共享变得稍微容易)
  • 在.h文件中:
    • 其他.h文件仅在绝对必要时才导入,例如,因为它们定义了类以外的类型(枚举、结构、所有带有typedef的类型),然后在当前.h文件中使用这些类型
    • 类是向前声明的(
      @class Foo;
      ),以避免拉入其他.h文件
    • 接口只包含其他类可以访问的内容!这里没有私人物品
  • 在.m文件中:
    • 包括您需要的所有.h文件。但不是更多;-)
    • 私有实例变量和属性在类扩展(
      @interface Foo()
      )中定义
    • 私有方法不再需要“前向声明”,所以不要这样做
在极少数情况下,一个类有一些东西是少数类应该访问的,而“普通”用户不应该访问的,我创建了
foo\u protected.h
头,其中包含一个类类别,定义了“protected”方法

关于
#定义
s的一个词:如果可能,避免使用它们。如果可能,请使用
const
变量或
enum
s,因为附加的类型信息可以帮助编译器以这种方式捕获更多错误。例如,使用
enum
s有一个很好的优点,即如果您有一个
开关
,但没有处理
enum
的所有值,就会收到警告。如果您添加一个新值,您将在忘记处理它们的任何地方收到警告,这是使用
#define
s无法得到的。

我是这样做的:

  • 通常的
    #import
    #import
    进入.pch文件。没有头文件或实现文件再次执行这些导入(使iOS和Mac OS X之间的代码共享变得稍微容易)
  • 在.h文件中:
    • 其他.h文件仅在绝对必要时才导入,例如,因为它们定义了类以外的类型(枚举、结构、所有带有typedef的类型),然后在当前.h文件中使用这些类型
    • 类是向前声明的(
      @class Foo;
      ),以避免拉入其他.h文件
    • 接口只包含其他类可以访问的内容!这里没有私人物品
  • 在.m文件中:
    • 包括您需要的所有.h文件。但不是更多;-)
    • 私有实例变量和属性在类扩展(
      @interface Foo()
      )中定义
    • 私有方法不再需要“前向声明”,所以不要这样做
在极少数情况下,一个类有一些东西是少数类应该访问的,而“普通”用户不应该访问的,我创建了
foo\u protected.h
头,其中包含一个类类别,定义了“protected”方法

关于
#定义
s的一个词:如果可能,避免使用它们。如果可能,请使用
const
变量或
enum
s,因为附加的类型信息可以帮助编译器以这种方式捕获更多错误。例如,使用
enum
s有一个很好的优点,即如果您有一个
开关
,但没有处理
enum
的所有值,就会收到警告。如果您添加一个新值,您将在忘记处理它们的任何地方收到警告,这是使用
\define
s无法得到的

导入框架应始终位于.h中

不,为什么

导入.h文件应始终使用.m格式

这很模糊。如果你不知道怎么办