2013-05-02 91 views
1
#import "ViewController.h" 

@interface ViewController() 
{ 
    NSString *string; 
} 
@end 

@implementation ViewController{ 
    NSString *string; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
} 

這兩種說法有什麼區別?哪個更好?這兩個陳述之間有什麼區別?

+1

@BorisE這是一個完全不同的問題。 – rmaddy 2013-05-02 17:29:04

+0

請注意,ivars的約定(以及爲屬性生成隱式ivars的方式)是用初始下劃線命名它們:'_string'。不是必需的,但有助於將伊娃訪問與財產調用區分開來。 – 2013-05-02 17:34:55

回答

6

假設您所指的語句是私有實例變量string的兩個不同聲明,則沒有區別。他們是宣佈私人伊娃的兩種不同方式。這是一個偏好問題。只需選擇一個。

我親自使用@implementation區塊中的一個。我只使用私有屬性的類擴展並聲明與協議一致。

+0

http://stackoverflow.com/questions/2571518/class-variable-defined-at-implementation-rather-than-interface/2571538#2571538 – 2013-05-02 17:25:16

+3

@ThilinaHewagama不同的情況。在這個問題中,伊娃被用花括號表示。在你關聯的問題中,變量不是大括號。巨大差距。 :) – rmaddy 2013-05-02 17:26:42

+0

哦,我沒有注意到。 :) – 2013-05-02 17:28:41

0

那麼,後者只是聲明變量而不必切換到.h文件的方式。 這只是我可能想到的問題。

+0

這不僅僅是一個簡單的問題。沒有理由在.h文件中放置私有聲明。私有實現細節應該在.m文件中。這是現代Objective-C的主要改進之一。我們不再需要使用私有ivars,私有屬性和私有協議來污染.h文件。 – rmaddy 2013-05-02 17:39:05