Objective-C 인코딩 사양 선택
일상적인 개인과 팀 인코딩 습관에 따라 몇 가지 Objective-C 코드 규범을 정리하고 이 글을 정리하여 지속적으로 업데이트합니다.여러 가지 규범과 사고방식은 이라는 책을 참고하여 매우 추천합니다.
명명 규칙
낙타봉명
static CSDataManager *gDataManager = nil; // good
static CSDataManager *dataManager = nil; // avoid
접두사
@interface OCBaseViewController : UIViewController
@end
@interface ViewController () {
BOOL _hasViewed; // avoid
}
@property (nonatomic, assign) BOOL isToday; // good
@end
- (void)_privateMethod { // avoid
}
#pragma mark - Private Method
- (void)privateMethod { // good
}
- (void)replaceObjectAtIndex:(NSUInteger)index withObject:(id)anObject; // ,good
+ (id)arrayWithArray:(NSArray *)array; // ,good
+ (id)getArrayWithArray:(NSArray *)array; // ,avoid
코드 형식
스페이스 바
@property (nonatomic, strong) NSString* name; // avoid
@property (nonatomic, strong) NSString *password; // good
-(void)viewDidLoad{ // avoid
[super viewDidLoad];
if([self isOk]){ // avoid
// ...
}else{ // avoid
// ...
}
}
- (void)viewDidLoad { // good
[super viewDidLoad];
if ([self isOk]) { // good
// ...
} else { // good
// ...
}
}
if ( i>10 ) { // avoid
i ++; // avoid
} else {
i+=2; // avoid
}
// good
if (i > 10) {
i++;
} else {
i += 2;
}
@property (nonatomic,readonly ,strong) NSString* name; // avoid
NSArray *array = @[@"A" , @"B" ,@"C"]; // avoid
@property (nonatomic, readonly, strong) NSString* name; // good
NSArray *array = @[@"A", @"B", @"C"]; // good
괄호
if (i > 10) // avoid
i++;
else
i--;
if (i > 10) { // good
i++;
} else {
i--;
}
// avoid
- (void)test
{
if ([self isOK])
{
// ...
}
else
{
// ...
}
}
// good
- (void)test {
if ([self isOK]) {
// ...
} else {
// ...
}
}
등록 정보
// avoid
@property (copy, nonatomic, readonly) NSString *name;
@property (nonatomic, assign, readonly) NSInteger age;
@property (readwrite, strong, nonatomic) CSCard *card;
// good
@property (nonatomic, readonly, copy) NSString *name;
@property (nonatomic, readonly, assign) NSInteger age;
@property (nonatomic, readwrite, strong) CSCard *card;
@property (nonatomic, copy) NSString *name; // good
NSMutableString * name = [[NSMutableString alloc] initWithString:@"User1"];
CSUserModel *user = [CSUserModel new];
user.name = name;
[name appendString:@"0"];
NSLog(@"%@", user.name); // output:User1
@property (nonatomic, strong) NSString *name; // avoid
NSMutableString * name = [[NSMutableString alloc] initWithString:@"User1"];
CSUserModel *user = [CSUserModel new];
user.name = name;
[name appendString:@"0"];
NSLog(@"%@", user.name); // output:User10, Something Wrong!
기타 문법
if (obj == nil && finish == YES && result == NO){ // avoid
}
if(!obj && finish && !result){ // good
}
줄을 바꾸다
// avoid
+ (void)animateWithDuration:(NSTimeInterval)duration animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion {
// ...
}
// good
+ (void)animateWithDuration:(NSTimeInterval)duration
animations:(void (^)(void))animations
completion:(void (^)(BOOL finished))completion {
// ...
}
메모
// avoid
- (void)test {
//Just For Debug
BOOL isTest = YES;//Main Logic
//...
}
// good
- (void)test {
// Just For Debug
BOOL isTest = YES; // Main Logic
// ...
}
/**
xxx , 。
xxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxx( )
@param error NSError,-1:xxx;-2:xxxxx
*/
- (void)methodWithError:(NSError **)error {
// ...
}
코드 조직
#pragma
- (void)dealloc { /* ... */ }
- (instancetype)init { /* ... */ }
#pragma mark - View Lifecycle
- (void)viewDidLoad { /* ... */ }
- (void)didReceiveMemoryWarning { /* ... */ }
#pragma mark - Setter Getter
- (void)setCustomProperty:(id)value { /* ... */ }
- (id)customProperty { /* ... */ }
#pragma mark - IBActions
- (IBAction)onOkButtonClick:(id)sender { /* ... */ }
#pragma mark - Public
- (void)publicMethod { /* ... */ }
#pragma mark - Private
- (void)privateMethod { /* ... */ }
#pragma mark - UITableViewDelegate
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { /* ... */ }
#pragma mark - Superclass
- (void)superClassMethod { /* ... */ }
#pragma mark - NSObject
- (NSString *)description { /* ... */ }
// avoid
@interface CodeStyleViewController ()
@end
// good
@interface CSViewController () <
UITableViewDelegate,
UITableViewDataSource,
UIActionSheetDelegate
>
@end
// avoid
- (void)method {
if ([self conditionA]) {
// some code..
if ([self conditionB]) {
// main logic...
}
}
}
// good
- (void)methodB {
if (![self conditionA]) {
return;
}
if (![self conditionB]) {
return;
}
// some codeA..
// main logic...
}
인터페이스 사양
@class CSShareViewController;
@protocol CSShareDelegate // avoid
- (void)shareFinished:(BOOL)isSuccess; // avoid
@end
@class CSShareViewController;
@protocol CSShareViewControllerDelegate // good
- (void)shareViewController:(CSShareViewController *)shareViewController // good
shareFinished:(BOOL)isSuccess;
@end
// avoid
- (void)methodWithError:(NSError **)error {
// ...
}
- (void)test1 {
NSError *error = nil;
if ([self methodWithError:&error]) { // avoid
// Main Logic
} else {
// Handle Error
}
}
// good
- (BOOL)methodWithError:(NSError **)error {
// ...
}
- (void)test {
NSError *error = nil;
if ([self methodWithError:&error]) { // good
// Main Logic
} else {
// Handle Error
}
}
참조 기사: * 선 및 Objective-C 프로그래밍 아트
내 블로그 원본: Objective-C 인코딩 사양 선택
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.