iOS代碼規(guī)范

對于我而言酱讶,為數不多取悅自己的方式就是袜瞬,發(fā)現一片新的大陸磕潮,或者將自己的屋子收拾成自己想要的樣子。

controller代碼分組

在函數分組和protocol/delegate實現中使用#pragma mark -來分類方法棺聊,要遵循以下一般結構:

#pragma mark - Lifecycle

- (instancetype)init {}

- (void)viewDidLoad {}? viewDidLoad中做三件事情,一件是addSubView贞谓,一件是添加約束initConstraints,一件是初始化數據initDefaultData

-?(void)viewWillAppear:(BOOL)animated?{}

- (void)dealloc {}

-?(void)didReceiveMemoryWarning?{}

#pragma mark - Public

- (void)ClassPublicMethod {}? 用類名開頭

#pragma mark - Private

- (void)privateMethod {}? 直接用功能命名方法

#pragma mark - event response

按鈕點擊限佩,touchBegan等方法

#pragma mark - 系統delegate

#pragma mark - UITextFieldDelegate

#pragma?mark?-?UITableViewDataSource

#pragma?mark?-?UITableViewDelegate

#pragma mark - UIScrollViewDelegate等。

#pragma mark - 自定義delegate

#pragma mark - Private set/get

所有的view都寫成屬性裸弦,用懶加載的形式進行創(chuàng)建祟同。然后只有在添加到父視圖的時候,用self.view的形式表示理疙,代表創(chuàng)建晕城,其他情況下用_view,省去走懶加載的方法


其他規(guī)范

1窖贤、方法大括號和其他大括號(if/else/switch/while 等.)總是在同一行語句打開但在新行中關閉

應該:

if(bool) {

}

不應該:

if(bool)

{

}


2砖顷、私有變量應該盡可能代替實例變量的使用。盡管使用實例變量是一種有效的方式赃梧,但更偏向于使用屬性來保持代碼一致性择吊。

應該:

@interface ZYObject : NSObject

@property?(strong,?nonatomic)?NSString?*text;

@end

不應該:

@interface ZYObject : NSObject{

???? NSString *text;

}


3、所有屬性特性應該顯式地列出來槽奕,有助于新手閱讀代碼几睛。屬性特性的順序應該是storage、atomicity粤攒。

應該:

@property (strong, nonatomic) NSString *name;

不應該:

@property (nonatomic, strong) NSString *name;


4所森、盡量多使用點語法,而不是用[]的方式去調用,提高代碼的簡潔性

應該:array.count????? 不應該:[array count]


5夯接、一個類中的常量建議用const關鍵字焕济,全局常量建議用#define,他們的區(qū)別如下:


const定義的只讀變量在程序運行過程中只有一份拷貝(因為它是全局的只讀變量盔几,存放在靜態(tài)區(qū))晴弃,而#define定義的宏常量在內存中有若干個拷貝。

#define宏是在預編譯階段進行替換,而const修飾的只讀變量是在編譯的時候確定其值上鞠。

#define宏沒有類型际邻,而const修飾的只讀變量具有特定的類型

注:const只能修飾常量或者常量等式


6、命名規(guī)范:(可讀性高芍阎,防止沖突)不同類中的公有方法和公有屬性加前綴世曾,如相冊類用PG開頭;常量的命名用K開頭作為標記谴咸;枚舉和delegate方法名都要以類名開頭轮听,delegate的方法要將調用者自己寫在方法的參數中

例如:枚舉

typedef NS_ENUM(NSInteger, ZYControllerType) {

??? ZYControllerTypeOne,

??? ZYControllerTypeTwo,

??? ZYControllerTypeThree

};

7、如果BOOL屬性的名字是一個形容詞岭佳,屬性就能忽略"is"前綴血巍,但要指定get訪問器的慣用名稱,例如:

@property (assign, getter=isEditable)BOOLeditable;


8珊随、當訪問CGRect里的x, y, width, 或 height時藻茂,應該使用CGGeometry函數而不是直接通過結構體來訪問。

應該:

CGRect frame = self.view.frame;

CGFloat?x?=?CGRectGetMinX(frame);

CGFloat?y?=?CGRectGetMinY(frame);

CGFloat?width?=?CGRectGetWidth(frame);

CGFloat?height?=?CGRectGetHeight(frame);

CGRect?frame?=?CGRectMake(0.0,?0.0,?width,?height);

不應該:

CGRect frame = self.view.frame;

CGFloat x = frame.origin.x;

CGFloat y = frame.origin.y;

CGFloat width = frame.size.width;

CGFloat height = frame.size.height;

CGRect frame = (CGRect){ .origin = CGPointZero, .size = frame.size };


9玫恳、當使用條件語句編碼時辨赐,左手邊的代碼應該是"golden" 或 "happy"路徑。也就是不要嵌套if語句京办,多個返回語句也是OK掀序。

應該:

- (void)someMethod {

??? if(![someOther?boolValue])?{

??????? return;

??? }

??? doSomething

}

不應該:

- (void)someMethod {

??? if([someOther?boolValue])?{

? ? ? ? doSomething;

??? }

}


10、當方法通過引用來返回一個錯誤參數惭婿,判斷返回值而不是錯誤變量不恭。

應該:

NSError *error;

BOOL isSuccess = [self trySomethingWithError:&error];

if (!isSuccess) {

??? // Handle Error

}

不應該:

NSError *error;

BOOL isSuccess = [self trySomethingWithError:&error];

if (error) {

??? // Handle Error

}

11、創(chuàng)建view的正確姿勢

i:重寫init方法财饥,并在其中addsubview

ii:重寫layoutSubviews方法换吧,并在其中添加約束

iii:? 需要動態(tài)計算長度的,單行用sizeWithAttributes钥星,多行用boundingRectWithSize

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末沾瓦,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子谦炒,更是在濱河造成了極大的恐慌贯莺,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件宁改,死亡現場離奇詭異缕探,居然都是意外死亡,警方通過查閱死者的電腦和手機还蹲,發(fā)現死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進店門爹耗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來耙考,“玉大人,你說我怎么就攤上這事潭兽【胧迹” “怎么了?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵讼溺,是天一觀的道長楣号。 經常有香客問我最易,道長怒坯,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任藻懒,我火速辦了婚禮剔猿,結果婚禮上,老公的妹妹穿的比我還像新娘嬉荆。我一直安慰自己归敬,他們只是感情好,可當我...
    茶點故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布鄙早。 她就那樣靜靜地躺著汪茧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪限番。 梳的紋絲不亂的頭發(fā)上舱污,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天,我揣著相機與錄音弥虐,去河邊找鬼扩灯。 笑死,一個胖子當著我的面吹牛霜瘪,可吹牛的內容都是我干的珠插。 我是一名探鬼主播,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼颖对,長吁一口氣:“原來是場噩夢啊……” “哼捻撑!你這毒婦竟也來了?” 一聲冷哼從身側響起缤底,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤布讹,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后训堆,有當地人在樹林里發(fā)現了一具尸體描验,經...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年坑鱼,在試婚紗的時候發(fā)現自己被綠了膘流。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片絮缅。...
    茶點故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖呼股,靈堂內的尸體忽然破棺而出耕魄,到底是詐尸還是另有隱情,我是刑警寧澤彭谁,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布吸奴,位于F島的核電站,受9級特大地震影響缠局,放射性物質發(fā)生泄漏则奥。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一狭园、第九天 我趴在偏房一處隱蔽的房頂上張望读处。 院中可真熱鬧,春花似錦唱矛、人聲如沸罚舱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽管闷。三九已至,卻和暖如春窃肠,著一層夾襖步出監(jiān)牢的瞬間包个,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工铭拧, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留赃蛛,地道東北人。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓搀菩,卻偏偏與公主長得像呕臂,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子肪跋,可洞房花燭夜當晚...
    茶點故事閱讀 44,619評論 2 354

推薦閱讀更多精彩內容

  • 一歧蒋、命名規(guī)范 1、統一要求含義清楚州既,盡量做到不需要注釋也能了解其作用谜洽,若做不到,就加注釋吴叶,使用全稱阐虚,不使用縮寫。 ...
    Untils閱讀 564評論 0 0
  • 方法聲明與定義: 1.星號前統一要求需要輸入空格 2.方法體左大括號于方法名的右側 3.-或者+與返回類型之間需要...
    GilbertW閱讀 367評論 0 0
  • iOS編程規(guī)范0規(guī)范 0.1前言 為??高產品代碼質量,指導廣大軟件開發(fā)人員編寫出簡潔蚌卤、可維護实束、可靠奥秆、可 測試、高效...
    iOS行者閱讀 4,455評論 21 35
  • iOS代碼規(guī)范 1咸灿、命名規(guī)范 類名首字母大寫构订,方法首字母小寫,方法中的參數首字母小寫避矢,同時盡量讓方法的命名讀起來像...
    東岳哥哥閱讀 427評論 0 2
  • 設計模式:命令模式 定義:“請求”封裝成對象悼瘾,以便使用不同的請求,隊列或者日志來參數化其他對象审胸,命令模式也支持可撤...
    CloudHunter閱讀 320評論 0 0