Skip to content

anivaros/objective-c-style-guide_old

Β 
Β 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 

Repository files navigation

Objective-C Style Guide

Π­Ρ‚ΠΎ руководство ΠΏΠΎ ΡΡ‚ΠΈΠ»ΡŽ ΠΊΠΎΠ΄Π°, основанноС Π½Π° руководствС для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Π² The New York Times(https://github.com/NYTimes/objective-c-style-guide/contributors)

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

Π‘ΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ с этим руководством ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½Π°. Π‘ΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π΅Ρ‰Π΅ Π²Π°ΠΆΠ½Π΅Π΅. А ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€ΠΈ модуля ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ β€” самоС Π²Π°ΠΆΠ½ΠΎΠ΅. Но Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° это руководство Π½Π΅ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠΎ, ΠΈ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΎΠΉΡ‚ΠΈ ΠΎΡ‚ Ρ€Π΅ΠΊΠΎΠΌΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΉ.

Π”Π²Π΅ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ€ΡƒΡˆΠΈΡ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»Π°:

  • Когда ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° сдСлаСт ΠΊΠΎΠ΄ ΠΌΠ΅Π½Π΅Π΅ Ρ‡ΠΈΡ‚Π°Π±Π΅Π»ΡŒΠ½Ρ‹ΠΌ Π΄Π°ΠΆΠ΅ для Ρ‚ΠΎΠ³ΠΎ, ΠΊΡ‚ΠΎ ΠΏΡ€ΠΈΠ²Ρ‹ΠΊ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ слСдуСт ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ.
  • Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² Π΅Π΄ΠΈΠ½ΠΎΠΌ стилС с ΠΊΠΎΠ΄ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°Ρ€ΡƒΡˆΠ°Π΅Ρ‚ ΠΏΡ€Π°Π²ΠΈΠ»Π° (ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, Π² силу историчСских ΠΏΡ€ΠΈΡ‡ΠΈΠ½) β€” Π²ΠΏΡ€ΠΎΡ‡Π΅ΠΌ, это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ΄Ρ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ Ρ‡ΡƒΠΆΠΎΠΉ ΠΊΠΎΠ΄.

НиТС прСдставлСны Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Apple ΠΏΠΎ этой ΠΆΠ΅ Ρ‚Π΅ΠΌΠ΅:

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

ИспользованиС Ρ‚ΠΎΡ‡Π΅ΠΊ

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ‚ΠΎΡ‡ΠΊΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для доступа ΠΊ свойствам. Π’ΠΎ всСх ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… случаях ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Π΅ скобки.

Π₯ΠΎΡ€ΠΎΡˆΠΎ:

view.backgroundColor = [UIColor orangeColor];
[UIApplication sharedApplication].delegate;

ΠŸΠ»ΠΎΡ…ΠΎ:

[view setBackgroundColor:[UIColor orangeColor]];
UIApplication.sharedApplication.delegate;

ΠžΡ‚ΡΡ‚ΡƒΠΏΡ‹

  • Для отсупов ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ‚Π°Π±Ρ‹ Π΄Π»ΠΈΠ½ΠΎΠΉ Π² 4 ΠΏΡ€ΠΎΠ±Π΅Π»Π° (ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ ваш ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ настроСн Π½Π° использованиС Ρ‚Π°Π±ΠΎΠ²).
  • Π€ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ скобки Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ… ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… конструкциях (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ if/else/switch/while) всСгда всСгда Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π² Ρ‚ΠΎΠΉ ΠΆΠ΅ строкС, Ρ‡Ρ‚ΠΎ ΠΈ условиС. Но Π·Π°ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ строкС.
  • НС оставляйтС пустых Π±Π»ΠΎΠΊΠΎΠ² с Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹ΠΌΠΈ скобками. Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ для ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ, Π½ΠΎ ΠΈΡ… Π½ΡƒΠΆΠ½ΠΎ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ пустыми Π² ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌ случаС.

Π₯ΠΎΡ€ΠΎΡˆΠΎ:

if (user.isHappy) {
//Do something
}
else {
//Do something else
}

ΠŸΠ»ΠΎΡ…ΠΎ:

@interface Blob : DataMartsBaseItem
{
    
}
  • ВсСгда стоит Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΏΡƒΡΡ‚ΡƒΡŽ строку ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ - это придаст большС чСткости ΠΊΠΎΠ΄Ρƒ. ΠžΡ‚ΡΡ‚ΡƒΠΏΡ‹ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² всСгда Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΡ‚Π΄Π΅Π»ΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ вынСсти Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹.
  • @synthesize ΠΈ @dynamic Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒΡΡ Π½Π° Π½ΠΎΠ²ΠΎΠΉ строкС.
  • ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ области видимости Ρ‚ΠΈΠΏΠ° @public, @protected ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ (Ρ‚ΠΈΠΏΠ° @optional Π² ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°Ρ…) Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π²ΠΈΠ³Π°Ρ‚ΡŒ Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΎΠ±Π΅Π» Π²ΠΏΡ€Π°Π²ΠΎ.

НапримСр:

@interface AFKSection : NSObject {
 @private
	NSString *_headline;
 @protected
	NSInteger _count;
}

Условия

Π’Π΅Π»ΠΎ условия Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобках Π΄Π°ΠΆΠ΅ Π² Ρ‚ΠΎΠΌ случаС, Ссли это ΠΌΠΎΠΆΠ½ΠΎ ΠΈ Π½Π΅ Π΄Π΅Π»Π°Ρ‚ΡŒ (ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ написано Π² ΠΎΠ΄Π½Ρƒ строку) errors. Π­Ρ‚ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ ошибки, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠ³Π΄Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ строка Π½Π΅ ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ ΠΏΠΎΠ΄ условиС, хотя Π΄ΠΎΠ»ΠΆΠ½Π° (Ρ‚Π°ΠΊ Π΄ΡƒΠΌΠ°Π΅Ρ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ). Π’ Π΄Ρ€ΡƒΠ³ΠΎΠΌ случаС, ошибка ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ ΠΊΠΎΠ³Π΄Π° строка Π²Π½ΡƒΡ‚Ρ€ΠΈ условного ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° Π·Π°ΠΊΠΎΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π° ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ строка становится Ρ‚Π΅Π»ΠΎΠΌ условного ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° . К Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅, Π΄Π°Π½Π½Ρ‹ΠΉ ΡΡ‚ΠΈΠ»ΡŒ Π»ΡƒΡ‡ΡˆΠ΅ согласуСтся с ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½ΠΈΠ΅ΠΌ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π±Π»ΠΎΠΊΠΎΠ² ΠΈ становится Π»ΡƒΡ‡ΡˆΠ΅ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΌ.

Π₯ΠΎΡ€ΠΎΡˆΠΎ:

if (!error) {
    return success;
}

ΠŸΠ»ΠΎΡ…ΠΎ:

if (!error)
    return success;

ΠΈΠ»ΠΈ

if (!error) return success;

Π’Π΅Ρ€Π½Π°Ρ€Π½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€

Π’Π΅Ρ€Π½Π°Ρ€Π½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€, ? , ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠ³Π΄Π° это ΡƒΠ»ΡƒΡ‡ΡˆΠ°Π΅Ρ‚ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΡΡ‚ΡŒ ΠΈ ΠΏΠΎΠ½ΡΡ‚Π½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π°. Π’ Ρ‚ΠΎΠΌ случаС, ΠΊΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΎΠ΄Π½ΠΎ условиС. Для Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… условий Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ "if" ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅.

Π₯ΠΎΡ€ΠΎΡˆΠΎ:

result = a > b ? x : y;

ΠŸΠ»ΠΎΡ…ΠΎ:

result = a > b ? x = c > d ? c : d : y;

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ошибок

Когда ΠΌΠ΅Ρ‚ΠΎΠ΄ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ ΠΏΠΎ ссылкС, провСряйтС Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π° Π½Π΅ ΠΎΡˆΠΈΠ±ΠΊΡƒ.

Π₯ΠΎΡ€ΠΎΡˆΠΎ:

NSError *error;
if (![self trySomethingWithError:&error]) {
    // Handle Error
}

ΠŸΠ»ΠΎΡ…ΠΎ:

NSError *error;
[self trySomethingWithError:&error];
if (error) {
    // Handle Error
}

НСкоторыС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈΠ· API Apple Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ(Π½Π΅ NULL) Π΄Π°ΠΆΠ΅ Π² случаС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ выполнСния, ΠΏΠΎ этой ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ Π½Π΅ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠΉΡ‚Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ошибки.

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹

Π’ опрСдСлСниях ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΡ‚ΠΎΡΡ‚ΡŒ послС Ρ‚ΠΈΠΏΠ° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² (символы - ΠΈ +). Π’Π°ΠΊ ΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π΅Π»Π°ΠΌΠΈ Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°Π·Π΄Π΅Π»ΡΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ².

НапримСр:

- (void)setExampleText:(NSString *)text image:(UIImage *)image;

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π½ΡƒΠΆΠ½ΠΎ Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ максимально ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠ²Π½ΠΎ. ИмСна ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, состоящиС ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ Π±ΡƒΠΊΠ²Ρ‹, Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для счётчика Π² Ρ†ΠΈΠΊΠ»Π΅ for().

Π—Π²Ρ‘Π·Π΄ΠΎΡ‡ΠΊΡƒ указатСля Π½ΡƒΠΆΠ½ΠΎ ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π²ΠΏΡ€ΠΈΡ‚Ρ‹ΠΊ ΠΊ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ NSString *text Π° Π½Π΅ NSString* text ΠΈΠ»ΠΈ NSString * text, ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ константы.

Для private ΠΈ protected ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ класса, ΠΈ/ΠΈΠ»ΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ подклассов) Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ instance-ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, Π° Π½Π΅ свойства. НС Π·Π°Π±Ρ‹Π²Π°ΠΉΡ‚Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΠΎ-ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости instance-ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… - protected.

Бвойства ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для public-ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, доступ ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ Π²Π½Π΅ класса. Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ свойства, для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ сСттСр ΠΈ/ΠΈΠ»ΠΈ Π³Π΅Ρ‚Ρ‚Π΅Ρ€. Π˜Ρ… Π½ΡƒΠΆΠ½ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π² .m Ρ„Π°ΠΉΠ»Π΅, Π² бСзымянной private-ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ.

Для простых Ρ‚ΠΈΠΏΠΎΠ² ΠΏΠΎ максимуму ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ NSInteger, NSUInteger, CGFloat вмСсто int, float ΠΈ Ρ‚.Π΄.. Π­Ρ‚ΠΎ Π² дальнСйшСм ΠΎΠ±Π»Π΅Π³Ρ‡ΠΈΡ‚ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π½Π° 64-Π±ΠΈΡ‚Π½ΡƒΡŽ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ. [Apple 64-Bit Transition Guide for Cocoa Touch] (https://developer.apple.com/library/ios/documentation/General/Conceptual/CocoaTouch64BitGuide/Major64-BitChanges/Major64-BitChanges.html#//apple_ref/doc/uid/TP40013501-CH2-SW8)

Π₯ΠΎΡ€ΠΎΡˆΠΎ:

@interface AFKSection : NSObject {
 @private
    NSString *_headline;
    NSUInteger _count;
}

@property (strong, nonatomic) NSString *publicHeadline;

ΠŸΠ»ΠΎΡ…ΠΎ:

@interface AFKSection: NSObject

@property (strong, nonatomic) NSString *publicHeadline;
@property (strong, nonatomic) NSString *headline;
@property (nonatomic) int count; 

@end

##IBOutlets

Для задания IBOutlet'ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ instance-ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅. По возмоТности ΠΈΠ·Π±Π΅Π³Π°ΠΉΡ‚Π΅ использования ΠΈΡ… Π²Π½Π΅ класса.

ВсС IBOutlet'Ρ‹ Π½ΡƒΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ "слабыми" (weak), Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ находятся Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ, ΠΈ Π½Π° Π½ΠΈΡ… ΡƒΠΆΠ΅ ссылаСтся ΠΈΡ… Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ.

strong допускаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для свойств ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΠΈΠΊΡ‚ΠΎ Π½Π΅ ссылаСтся (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ViewController'Ρ‹, ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² xib'Π°Ρ…, находящиСся Π²Π²Π΅Ρ€Ρ…Ρƒ ΠΈΡ… ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ).

Π₯ΠΎΡ€ΠΎΡˆΠΎ:

@interface DMWidgetViewController : DMViewController {
 @private
    IBOutlet DMObjectPassportViewController *_objectPassportViewController;
    IBOutlet DMNavigationMenuWidgetSelectViewController *_topMenuViewController;
    IBOutlet DMSideMenuViewController *_sideMenuViewController;
    
    __weak IBOutlet UIView *_containerView;
    __weak IBOutlet UIView *_topBarContainerView;
    __weak IBOutlet UIImageView *_contentBackgroundImageView;
}

ΠŸΠ»ΠΎΡ…ΠΎ:

@interface DMSideMenuCell : UITableViewCell
@property (nonatomic, strong) IBOutlet UIImageView* cellBg;
@property (nonatomic, strong) IBOutlet UILabel* titleLbl;
@end

ΠΈΠ»ΠΈ

@interface DMCarouselViewController : DMViewController {
 @private
    IBOutlet UIButton *changeTypeButton;
	IBOutlet UILabel *dateLabel;
	IBOutlet UIButton *refreshButton;
}

ΠŸΡ€Π°Π²ΠΈΠ»Π° имСнования

По возмоТности ΡΡ‚Π°Ρ€Π°ΠΉΡ‚Π΅ΡΡŒ ΡΠΎΠ±Π»ΡŽΠ΄Π°Ρ‚ΡŒ соглашСниС Apple ΠΎ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠΈ memory management rules (NARC).

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ….

Π₯ΠΎΡ€ΠΎΡˆΠΎ:

UIButton *settingsButton;

ΠŸΠ»ΠΎΡ…ΠΎ:

UIButton *setBut;

Π’Ρ€Π΅Ρ…Π±ΡƒΠΊΠ²Π΅Π½Π½Ρ‹Π΅ прСфиксы (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ 'AFK') всСгда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ для ΠΈΠΌΠ΅Π½ классов ΠΈ констант, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΈΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π½Π΅Π±Ρ€Π΅Ρ‡ΡŒ для сущностСй Core Data ΠšΠΎΠ½ΡΡ‚Π°Π½Ρ‚Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π’Π΅Ρ€Π±Π»ΡŽΠΆΡŒΠ΅ΠΌΠ Π΅Π³ΠΈΡΡ‚Ρ€Π΅, Π³Π΄Π΅ всС слова Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ с большой Π±ΡƒΠΊΠ²Ρ‹. Π›ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ константы Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒΡΡ с Π±ΡƒΠΊΠ²Ρ‹ k. Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅-ΠΆΠ΅ константы Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒΡΡ с ΠΈΠΌΠ΅Π½ΠΈ класса, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ описаны.

Π₯ΠΎΡ€ΠΎΡˆΠΎ:

static const NSTimeInterval kNavigationFadeAnimationDuration = 0.3;

ΠŸΠ»ΠΎΡ…ΠΎ:

static const NSTimeInterval fadetime = 1.7;

Бвойства Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠΆΠ΅ Π² Π’Π΅Ρ€Π±Π»ΡŽΠΆΡŒΠ΅ΠΌΠ Π΅Π³ΠΈΡΡ‚Ρ€Π΅, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ слово Π² Π½ΠΈΠΆΠ½Π΅ΠΌ рСгистрС. Если Xcode автоматичСски синтСзировал ΠΏΠ΅Ρ€ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΎΡΡ‚Π°Π²ΡŒΡ‚Π΅ ΠΈΡ…. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС, согласно Π²Ρ‹ΡˆΠ΅ сказанному, ΠΈΠΌΠ΅Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… для этих свойств Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒΡΡ с подчСркивания ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ слово Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π² Π½ΠΈΠΆΠ½Π΅ΠΌ рСгистрС. Π’ Ρ‚Π°ΠΊΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ Xcode обСспСчиваСт связь ΠΌΠ΅ΠΆΠ΄Ρƒ свойствами ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ.

Π₯ΠΎΡ€ΠΎΡˆΠΎ:

@synthesize descriptiveVariableName = _descriptiveVariableName;

ΠŸΠ»ΠΎΡ…ΠΎ:

id varnm;

Π‘ΠΈΠΌΠ²ΠΎΠ»Ρ‹ подчСркивания (_)

Π’Π½ΡƒΡ‚Ρ€ΠΈ класса доступ (Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ / запись) ΠΊ instance-ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΅ΡΡ‚ΡŒ свойства (properties), Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒΡΡ Ρ‡Π΅Ρ€Π΅Π· self.. Π’ этом случаС сразу Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ это ΠΈΠΌΠ΅Π½Π½ΠΎ свойство. Π›ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ символов подчСркивания (_).

ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ

ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Π°ΠΌ, Π³Π΄Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ Π·Π°Ρ‡Π΅ΠΌ Π² ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ части ΠΊΠΎΠ΄Π° дСлаСтся Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ. Π›ΡŽΠ±Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ Π² Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΌ состоянии, Π»ΠΈΠ±ΠΎ ΠΈΡ… слСдуСт ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ.

Если ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ β€” Ρ„Ρ€Π°Π·Π° ΠΈΠ»ΠΈ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΏΠ΅Ρ€Π²ΠΎΠ΅ слово Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ написано с большой Π±ΡƒΠΊΠ²Ρ‹, Ρ‚ΠΎΡ‡ΠΊΡƒ Π² ΠΊΠΎΠ½Ρ†Π΅ прСдлоТСния ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ.

Π‘Π»ΠΎΠΊΠΎΠ²Ρ‹Ρ… ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π² слСдуСт ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ, ΠΊΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ самодокумСнтирован ΠΈ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ нСсколько строчСк ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π² для Π½Π΅ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… ΠΈΠ»ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… участков.

НС оставляйтС Π·Π°ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ строчки ΠΊΠΎΠ΄Π°, ΠΈΡ… слСдуСт ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΎΠΉ ΠΊΠΎΠ΄Π° Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ.

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ ΠΈ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅: ΠΌΠ΅Ρ‚ΠΎΠ΄ dealloc, Ссли ΠΎΠ½ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ, Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠΌΠ΅Ρ‰Π°Ρ‚ΡŒΡΡ Π²Π²Π΅Ρ€Ρ…Ρƒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ (@implementation), сразу послС @synthesize ΠΈ @dynamic . Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ: ΠΌΠ΅Ρ‚ΠΎΠ΄ init Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ располоТСн сразу послС dealloc ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π²ΠΎ всСх классах.

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² init Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ:

- (instancetype)init {
    self = [super init]; // or call the designated initalizer
    if (self) {
        // Custom initialization
    }

    return self;
}

Π›ΠΈΡ‚Π΅Ρ€Π°Π»Ρ‹

Для создания нСизмСняСмых ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² (immutable objects) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π»ΠΈΡ‚Π΅Ρ€Π°Π»Ρ‹ классов NSString, NSDictionary, NSArray, ΠΈ NSNumber. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ nil значСния Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹-Π»ΠΈΡ‚Π΅Ρ€Π°Π»Ρ‹ классов NSArray ΠΈ NSDictionary, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ это ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ошибкС.

Π₯ΠΎΡ€ΠΎΡˆΠΎ:

NSArray *names = @[@"Brian", @"Matt", @"Chris", @"Alex", @"Steve", @"Paul"];
NSDictionary *productManagers = @{@"iPhone" : @"Kate", @"iPad" : @"Kamal", @"Mobile Web" : @"Bill"};
NSNumber *shouldUseLiterals = @YES;
NSNumber *buildingZIPCode = @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 *buildingZIPCode = [NSNumber numberWithInteger:10018];

CGRect Functions

ВмСсто прямого доступа ΠΊ полям x, y, width, ΠΈΠ»ΠΈ height структуры CGRect, всСгда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ CGGeometry.

Из Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Apple CGGeometry:

ΠžΠΏΠΈΡΠ°Π½Π½Ρ‹Π΅ Π² Π΄Π°Π½Π½ΠΎΠΌ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΠ΅ структуру CGRect Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°, нСявно приводят эти структуры ΠΊ стандартному Π²ΠΈΠ΄Ρƒ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, ΠΈΠ·Π±Π΅Π³Π°ΠΉΡ‚Π΅ прямого доступа ΠΊ полям структуры CGRect ΠΏΡ€ΠΈ написании ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ВмСсто этого для Ρ€Π°Π±ΠΎΡ‚Ρ‹ со структурами ΠΈ для получСния Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠΎΠ»Π΅ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, описанныС Π² Π΄Π°Π½Π½ΠΎΠΌ руководствС.

Π₯ΠΎΡ€ΠΎΡˆΠΎ:

CGRect frame = self.view.frame;

CGFloat x = CGRectGetMinX(frame);
CGFloat y = CGRectGetMinY(frame);
CGFloat width = CGRectGetWidth(frame);
CGFloat height = CGRectGetHeight(frame);

ΠŸΠ»ΠΎΡ…ΠΎ:

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;

ΠšΠΎΠ½ΡΡ‚Π°Π½Ρ‚Ρ‹

Π˜Π·Π±Π΅Π³Π°ΠΉΡ‚Π΅ использования "магичСских чисСл"(magic numbers) ΠΈ строковых Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΠΎΠ². ВмСсто этого опрСдСляйтС ΠΈΡ… ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅-константы. Π­Ρ‚ΠΎ позволяСт ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ понятнСй ΠΈ ΠΎΠ±Π»Π΅Π³Ρ‡Π°Π΅Ρ‚ ΠΈΡ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅. ΠžΠ±ΡŠΡΠ²Π»ΡΠΉΡ‚Π΅ константы с ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ static ΠΈ Π½Π΅ ΠΎΠ±ΡŠΡΠ²Π»ΡΠΉΡ‚Π΅ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ #define. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ #define Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для макросов. Названия Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… констант (enum-ΠΎΠ², Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…-констант, ΠΈ Ρ‚.Π΄.) Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒΡΡ со строчной Π±ΡƒΠΊΠ²Ρ‹ k. Для раздСлСния слов ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π’Π΅Ρ€Π±Π»ΡŽΠΆΠΈΠΉΠ Π΅Π³ΠΈΡΡ‚Ρ€. Для цСлочислСнных (NSInteger) констант ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ NS_ENUM.

Π₯ΠΎΡ€ΠΎΡˆΠΎ:

static NSString * const kCompanyName = @"The New York Times Company";

static const CGFloat kImageThumbnailHeight = 50.0;

NS_ENUM(NSInteger, TableSize) {
    kTableSizeRowsCount = 10
};

ΠŸΠ»ΠΎΡ…ΠΎ:

 #define CompanyName @"The New York Times Company"

 #define thumbnailHeight 2

Π₯ΠΎΡ€ΠΎΡˆΠ°Ρ ΡΡ‚Π°Ρ‚ΡŒΡ ΠΎΠ± Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π°Ρ… ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌ прСпроцСссора

Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ константы

Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ константы Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒΡΡ Π² Ρ„Π°ΠΉΠ»Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ описаниС константы с ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ extern. Названия Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… констант Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒΡΡ с ΠΈΠΌΠ΅Π½ΠΈ класса, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° константа.

Π₯ΠΎΡ€ΠΎΡˆΠΎ:

.h

extern NSString *const AFKSearchEngineSearchResultsScopeKey;

.m

NSString *const AFKSearchEngineSearchResultsScopeKey = @"scopeKey";

Π’ΠΈΠΏ пСрСчислСниС

ΠŸΡ€ΠΈ использовании enumΠΎΠ² рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ спСцификатор Ρ‚ΠΈΠΏΠ° Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ ΠΈΠΌΠ΅Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ ΡΡ‚Ρ€ΠΎΠ³ΡƒΡŽ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Ρ‚ΠΈΠΏΠΎΠ² ΠΈ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½Π½ΠΎΠ΅ Π°Π²Ρ‚ΠΎΠ·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°. Π’Π΅ΠΏΠ΅Ρ€ΡŒ SDK Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя макрос, ΠΎΠ±Π»Π΅Π³Ρ‡Π°ΡŽΡ‰ΠΈΠΉ ΠΈ ΡƒΠ»ΡƒΡ‡ΡˆΠ°ΡŽΡ‰ΠΈΠΉ использованиС фиксированного ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° Ρ‚ΠΈΠΏΠΎΠ² - NS_ENUM()

Π₯ΠΎΡ€ΠΎΡˆΠΎ:

typedef NS_ENUM(NSInteger, NYTAdRequestState) {
    kNYTAdRequestStateInactive,
    kNYTAdRequestStateLoading
};

ΠŸΠ»ΠΎΡ…ΠΎ:

typedef enum
{
    en_BlobUnknown,
    en_BlobImageRetina,
    en_BlobImageBgRetina,
    en_BlobPdf
}
enumBlobType;

Private свойства

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ private-свойства Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ сСттСр ΠΈΠ»ΠΈ Π³Π΅Ρ‚Ρ‚Π΅Ρ€ для intance-ΠΏΠ΅Ρ€ΠΌΠ΅Π½Π½Ρ‹Ρ… (Π²ΠΎ всСх ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… случаях ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ intance-ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅).

ΠžΠ±ΡŠΡΠ²Π»ΡΠΉΡ‚Π΅ private-свойства Π² class extension (Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹Ρ… катСгориях) Π² Ρ„Π°ΠΉΠ»Π΅ с Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ класса (.m). Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ (Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ NYTPrivate ΠΈΠ»ΠΈ private) Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Π΄Ρ€ΡƒΠ³ΠΈΡ… классов.

Π₯ΠΎΡ€ΠΎΡˆΠΎ:

@interface NYTAdvertisement ()

@property (nonatomic, strong) GADBannerView *googleAdView;
@property (nonatomic, strong) ADBannerView *iAdView;
@property (nonatomic, strong) UIWebView *adXWebView;

@end

ИмСнованиС графичСских рСсурсов

Π˜Π·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π½Π°Π·Π²Π°Π½Ρ‹ Π² Π’Π΅Ρ€Π±Π»ΡŽΠΆΡŒΠ΅ΠΌΠ Π΅Π³ΠΈΡΡ‚Ρ€Π΅ с описаниСм ΠΈΡ… назначСния, ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ имя класса ΠΈΠ»ΠΈ свойства, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΎΠ½ΠΈ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ (Ссли Ρ‚Π°ΠΊΠΎΠ΅ имССтся), Π΄Π°Π»Π΅Π΅ ΠΈΠ΄Π΅Ρ‚ Ρ†Π²Π΅Ρ‚ ΠΈΠ»ΠΈ располоТСниС, ΠΈ Π² ΠΊΠΎΠ½Ρ†Π΅ состояниС элСмСнта, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅.

Π₯ΠΎΡ€ΠΎΡˆΠΎ

  • RefreshBarButtonItem / RefreshBarButtonItem@2x and RefreshBarButtonItemSelected / RefreshBarButtonItemSelected@2x
  • ArticleNavigationBarWhite / ArticleNavigationBarWhite@2x and ArticleNavigationBarBlackSelected / ArticleNavigationBarBlackSelected@2x.

Π˜Π·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ для ΠΎΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Ρ… Ρ†Π΅Π»Π΅ΠΉ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ сгруппированы Π² ΠΏΠ°ΠΏΠΊΠΈ.

ЛогичСскиС Ρ‚ΠΈΠΏΡ‹

НС сравнвайтС Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ с nil Π² условных ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°Ρ…. Никогда Π½Π΅ Π΄Π΅Π»Π°ΠΉΡ‚Π΅ сравнСния с YES, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ YES ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΊΠ°ΠΊ (BOOL)1, ΠΈ Ссли Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΡΡ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒ YES со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Π΄Π»ΠΈΠ½ΠΎΠΉ Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ 1 Π±Π°ΠΉΡ‚ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ short ΠΈΠ»ΠΈ int), Ρ‚ΠΎ ΠΏΡ€ΠΈ сравнСнии Π±ΡƒΠ΄Π΅Ρ‚ использован Ρ‚ΠΎΠ»ΡŒΠΊΠΎ младший Π±Π°ΠΉΡ‚ этого значСния.

Π‘Π»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ этип ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ позволяСт Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ Сдинобразия Π² ΠΊΠΎΠ΄Π΅ ΠΈ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ Π΅Π³ΠΎ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΡΡ‚ΡŒ.

Π₯ΠΎΡ€ΠΎΡˆΠΎ:

if (!someObject) {
}

ΠŸΠ»ΠΎΡ…ΠΎ:

if (someObject == nil) {
}

Π₯ΠΎΡ€ΠΎΡˆΠΎ(для Ρ‚ΠΈΠΏΠ° BOOL):

if (isAwesome)
if (![someObject boolValue])

ΠŸΠ»ΠΎΡ…ΠΎ(для Ρ‚ΠΈΠΏΠ° BOOL):

if ([someObject boolValue] == NO)
if (isAwesome == YES) // Never do this.

Если имя BOOL-свойства интСрпрСтируСтся ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠ»Π°Π³Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅, Ρ‚ΠΎ прСфикс "is" ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ, Π½ΠΎ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΊΠ°ΠΆΠΈΡ‚Π΅ Π΅Π³ΠΎ Π² Π½Π°Π·Π²Π°Π½ΠΈΠΈ Π³Π΅Ρ‚Ρ‚Π΅Ρ€Π°.

@property (assign, getter=isEditable) BOOL editable;

ВСкст ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ взяты ΠΈΠ· Cocoa Naming Guidelines.

Π‘ΠΈΠ½Π³Π»Ρ‚ΠΎΠ½Ρ‹

Для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ синглтонов ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ потокобСзопасный шаблон

#import <Foundation/Foundation.h>

@interface MySingleton : NSObject

+(instancetype) sharedInstance;

+(instancetype) alloc __attribute__((unavailable("alloc not available, call sharedInstance instead")));
-(instancetype) init __attribute__((unavailable("init not available, call sharedInstance instead")));
+(instancetype) new __attribute__((unavailable("new not available, call sharedInstance instead")));

@end

#import "MySingleton.h"

@implementation MySingleton

+(instancetype) sharedInstance {
    static id shared = nil;
    static dispatch_once_t onceToken;
    
    dispatch_once(&onceToken, ^{
        shared = [(MySingleton *)[super alloc] initUniqueInstance];
    });
    return shared;
}

-(instancetype) initUniqueInstance {
    return (MySingleton *)[super init];
}

@end

ИспользованиС шаблона ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ многочислСнныС ошибки.

ΠŸΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ структура Ρ„Π°ΠΉΠ»ΠΎΠ²

ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ объявлСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…:

  • IBOutlets (strong, ΠΏΠΎΡ‚ΠΎΠΌ weak)
  • ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… классов
  • ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ UIKit (UIImage, UINib))
  • ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Foundation (NSString, NSArray)
  • ΠŸΡ€ΠΎΡΡ‚Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… (NSInteger, BOOL)

.h -

  • ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅
  • Бвойства
  • IBActions
  • ΠŸΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹

.m

  • dealloc
  • init-ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹
  • ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° UIViewController'a Π² порядкС ΠΈΡ… Π²Ρ‹Π·ΠΎΠ²Π° (viewDidLoad, viewWillAppear)
  • Π‘Π΅Ρ‚Ρ‚Π΅Ρ€Ρ‹ / Π³Π΅Ρ‚Ρ‚Π΅Ρ€Ρ‹
  • IBActions
  • ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π΄Π΅Π»Π΅Π³Π°Ρ‚ΠΎΠ² ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹
  • ΠžΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹

ЛогичСскиС Π±Π»ΠΎΠΊΠΈ ΠΊΠΎΠ΄Π° раздСляйтС #pragma mark - <НазваниС Π±Π»ΠΎΠΊΠ°>

Π₯ΠΎΡ€ΠΎΡˆΠΎ:

- (void)dealloc {}

- (instancetype)init {}

#pragma mark - Lifecycle

- (void)viewDidLoad {}
- (void)viewWillAppear:(BOOL)animated {}
- (void)didReceiveMemoryWarning {}

#pragma mark - Custom Accessors

- (void)setCustomProperty:(id)value {}
- (id)customProperty {}

#pragma mark - IBActions

- (IBAction)submitData:(id)sender {}

#pragma mark - Protocol conformance
#pragma mark - UITextFieldDelegate
#pragma mark - UITableViewDataSource
#pragma mark - UITableViewDelegate

#pragma mark - NSCopying

- (id)copyWithZone:(NSZone *)zone {}

#pragma mark - NSObject

- (NSString *)description {}

#pragma mark - Public

- (void)publicMethod {}

#pragma mark - Private

- (void)privateMethod {}

Xcode-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚

ЀизичСская структура Ρ„Π°ΠΉΠ»ΠΎΠ² Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ логичСской структурС Ρ„Π°ΠΉΠ»ΠΎΠ² Π² Xcode. Π›ΡŽΠ±Ρ‹Π΅ Π³Ρ€ΡƒΠΏΠΏΡ‹ (groups) Π² Xcode-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°ΠΏΠΊΠ°ΠΌ Π² Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмС. Для большСй ясности Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠ΄ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎ Ρ‚ΠΈΠΏΡƒ, Π½ΠΎ ΠΈ ΠΏΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

ВсСгда, ΠΏΡ€ΠΈ возмоТности, Π²ΠΊΠ»ΡŽΡ‡Π°ΠΉΡ‚Π΅ "Treat Warnings as Errors" Π² настройках (Build Settings) Ρ‚Π°Ρ€Π³Π΅Ρ‚Π° ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π°ΠΉΡ‚Π΅ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ большС Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… warning-ΠΎΠ². Если Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΎΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ Ρ‚ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ warning, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Clang's pragma feature.

Π”Ρ€ΡƒΠ³ΠΈΠ΅ руководства ΠΏΠΎ ΡΡ‚ΠΈΠ»ΡŽ ΠΊΠΎΠ΄Π° Objective-C

About

Objective-C Style Guide

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published