iOS object-c 사양

6113 단어

1. 코드 구조


함수 그룹과 protocol/delegate에서 이루어진 코드는 #pragema mark -로 분할됩니다. 예를 들어 다음과 같습니다.
#pragma mark - Lifecycle
- (instancetype)init {}
- (void)dealloc {}
- (void)viewDidLoad {}
- (void)viewWillAppear:(BOOL)animated {}
- (void)didReceiveMemoryWarning {}

#prageme mark - UITableViewDataSource
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

2. 코드 들여쓰기


코드 들여쓰기는 4개의 공백을 사용합니다. (만약 tab을 사용하면 1개의 tab을 4개의 공백으로 설정합니다.) 예를 들어:
if (enable) {
    //Do Something
}

3. 코드 주석


코드 주석은 최신이고 유효한 주석을 유지하는 코드를 최대한 삭제해야 한다. 반드시 보존해야 하는 이유가 없으면 코드 자체 주석을 사용할 수 있는 상황에서 주석을 사용하는 것을 최대한 피해야 한다.

4. 이름 지정


OC의 명칭은 가능한 한 변수의 의미를 명확하게 표현하고 지나치게 길게 할 필요가 없다. 예를 들어 다음과 같다.
마땅히:
UIButton *settingButton

간략하게 쓰면 안 된다.
UIButton *setBtn

속성의 명칭은 낙타봉식, 단어의 알파벳 소문자를 채택한다.속성은 @property 키워드를 사용합니다. @ synthesize를 직접 쓰지 마십시오.
마땅히:
@property (nonatomic, copy) NSString *chatPlatform;

... 해서는 안 된다
id someValue

5. 속성 특성


모든 속성의 특성은 현시적으로 열거하고 속성 변수를 정의할 때 가능한 한 업무 모듈에 따라 정의해야 한다.공백 형식 참조 예:
마땅히:
//        
@property (nonatomic, assign) int64_t chatId;
@property (nonatomic, copy) NSString *cmId;

//        
@property (nonatomic, strong) LPEmojiAnimationView *smileAnimationView;
@property (nonatomic, strong) LPEmojiAnimationView *heartAnimationView;

다음을 수행하지 않아야 합니다.
@property (nonatomic,weak)IBOutlet UIView *containerView;
@property(nonatomic) NSString *tutorialName;

NSString은 strong 대신 copy 를 사용해야 합니다.

6. 변수

  • 변수의 명칭은 설명된 방식으로 명명해야 하며, 숫자, 단일 문자로 명명하지 말아야 한다.
    CGFloat imageHeight = 44.0f
    
    하지 말아야 한다.
    CGFloat h = 44.0f
    
  • 별표는 변수가 지침임을 나타낸다.예: NSString *text, 아니오NSString * text도 아니오NSString* text
  • 7. 방법


    방법의 명칭은 방법의 유형(-/+) 뒤에 빈칸이 있어야 한다.방법의 각 단락 사이에도 빈칸이 있어야 한다.매개 변수 앞에 이 매개 변수를 설명하는 키워드를 포함해야 합니다.
    마땅히:
    - (void)setUserName:(NSString *)name headImage:(UIImage *)headImage;
    

    다음을 수행하지 않아야 합니다.
    - (void)setUserName:(NSString *)name  h:(UIImage *) headImage;
    

    8. 액면가

    NSString,NSDictionary,NSArray,NSNumber의 액면가는 이런 종류의 변하지 않는 실례를 만들 때 사용해야 한다.그러나nil값은 NSDictionary,NSArray자면값으로 전송되지 않아crash를 초래할 수 있습니다.
    마땅히:
    NSArray *names = @[@"Brian", @"Matt", @"Chris", @"Alex", @"Steve", @"Paul"];
    NSDictionary *productManagers = @{@"iPhone": @"Kate", @"iPad": @"Kamal", @"Mobile Web": @"Bill"};
    NSNumber *shouldUseLiterals = @YES;
    NSNumber *buildingStreetNumber = @10018;
    

    다음을 수행하지 않아야 합니다.
    NSArray *names = [NSArray arrayWithObjects:@"Brian", @"Matt", @"Chris", @"Alex", @"Steve", @"Paul", nil];
    NSDictionary *productManagers = [NSDictionary dictionaryWithObjectsAndKeys: @"Kate", @"iPhone", @"Kamal", @"iPad", @"Bill", @"Mobile Web", nil];
    NSNumber *shouldUseLiterals = [NSNumber numberWithBool:YES];
    NSNumber *buildingStreetNumber = [NSNumber numberWithInteger:10018];
    

    9. 상수


    상수는 반복적으로 사용되고 대체되기 쉬워 빠르게 수정할 수 있는 값이다.상수는 static 로 대체하는 것이 아니라 #defeine 로 매크로를 정의하는 것을 사용해야 한다.
    마땅히:
    static NSString *MyCellIdentifier = @"MyCellIdentifier";
    static CGFloat const MyCellHeight = 44.0f;
    

    다음을 수행하지 않아야 합니다.
    #define MyCellIdentifier = @"MyCellIdentifier";
    #define MyCellHeight = 44.0f;
    
    #define의 사용은 일부 매크로 함수의 정의에 사용할 것을 권장합니다. 예를 들어
    #define RGBCOLOR(r, g, b)  [UIColor colorWithRed:(r)/255.0f green:(g)/255.0f blue:(b)/255.0f alpha:1]
    

    10.Case 문


    컴파일러가 강제적으로 요구하지 않는 한case 문장에 괄호를 치는 것은 필수적이지 않습니다.하나의 케이스 문장에 여러 줄 코드가 있을 때, 괄호는 다음과 같이 붙여야 한다.
    switch (condition) {
      case 1:
        // ...
        break;
      case 2: {
        // ...
        // Multi-line example using braces
        break;
      }
      case 3:
        // ...
        break;
      default: 
        // ...
        break;
    }
    

    11. 부울 값


    Objective-C 사용YESNO.true 및 false를 사용하지 마십시오.nilNO로 해석되기 때문에 더 이상 조건문에서 비교할 필요가 없다.어떤 물건을 가지고 YES와 직접 비교하지 마라.
    마땅히:
    if (someObject) {}
    if (![anotherObject boolValue]) {}
    

    다음을 수행하지 않아야 합니다.
    if (someObject == nil) {}
    if ([anotherObject boolValue] == NO) {}
    if (isAwesome == YES) {} // Never do this.
    if (isAwesome == true) {} // Never do this.
    

    12. 조건문


    조건문 주체는 오류를 방지하기 위해 대괄호로 둘러싸야 한다. 설령 조건문 주체가 대괄호로 작성하지 않더라도. (예를 들어 한 줄의 코드만 사용한다.)이 오류는 두 번째 줄 코드를 추가하고if문장이 되기를 기대하는 것을 포함한다.또한, 이벤트 more dangerous defect는if문장에서 한 줄의 코드가 주석된 후에 다음 줄의 코드는if문장의 일부분이 될 수 있습니다.이외에도 이런 풍격은 다른 조건문장의 풍격과 일치하기 때문에 더욱 쉽게 읽을 수 있다.
    마땅히:
    if (!error) {
      return success;
    }
    

    다음을 수행하지 않아야 합니다.
    if (!error)
      return success;
     
    if (!error) return success;
    

    13. 삼목 연산자


    코드의 명확성과 간결성을 높여야 할 때 삼원 조작부호는?:사용할 수 있습니다.단일 조건으로 값을 구하는 것은 종종 그것을 필요로 한다.여러 조건으로 값을 구할 때if문장을 사용하거나 실례 변수를 재구성할 때 코드는 더욱 읽기 쉽다.일반적으로 삼원 조작부호를 사용하는 것은 조건에 따라 값을 부여하는 경우이다.
    Non-boolean의 변수를 무언가와 비교하고 괄호()를 붙이면 가독성이 향상됩니다.비교된 변수가boolean 형식이라면 괄호가 필요하지 않습니다.
    마땅히:
    NSInteger value = 5;
    result = (value != 0) ? x : y;
    
    BOOL isHorizontal = YES;
    result = isHorizontal ? x : y;
    

    다음을 수행하지 않아야 합니다.
    result = a > b ? x = c > d ? c : d : y;
    

    좋은 웹페이지 즐겨찾기