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

Val*_*sov 1 objective-c ios

嘿有经验的程序员!

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

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

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

  • #import框架应始终在.h
  • #import .h文件应始终以.m为单位
  • .h文件应该只有@class,而不是import(不包括UIKit之类的框架等)
  • 代表们应该在.m

    @interface ViewController() <UIAlertViewDelegate> 
    @end
    
    Run Code Online (Sandbox Code Playgroud)

2)我应该在哪里放置我的实例变量?

  • Private和Protected变量必须是.m
  • 公众必须在.h

3)我应该把我的方法放在哪里?

  • 公开在.h
  • 在.m私有(是的,我知道我的"私人方法"并不是真正私密的,只是隐藏)

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

4)#define?怎么样?

  • 全球 - 始终在.h
  • 仅在该类中使用 - 始终在.m中

5)我应该在哪里放置NSNotification全局标识符以及如何组织它们

  • #define NSNotificationDataSourceDidLoadData @"NSNotificationDataSourceDidLoadData"在将发送此通知的类中的.h文件中

但......

  • Apple在.h文件中有很多私有内容
  • 在大多数情况下,我的.h文件只是.. EMPTY :)

一年前,我有另一种情况 - 一切都在.h,但我认为它也很糟糕

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

这是关于编码风格的问题,而不是关于"如何使其可编辑"的问题

Dar*_*ust 5

我是这样做的:

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

在极少数情况下,类有一些类应该访问但是"普通"用户不应该访问的东西,我创建foo_protected.h了具有定义"受保护"方法的类类别的头文件.

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