2011-06-24 34 views
0

我並不陌生編碼,但只是回到它。我在學校學了Java,但我開始學習Objective C。基本上,原諒這個問題是如何補救的。我找不到任何這種簡單的搜索,這就是爲什麼我問。從一個單獨的類調用對象的setter方法

無論如何,我有我的officeLife.m文件的代碼下面。我正在使用的兩個主要類是Person.h/.m和officeLife.h/.m。我試圖通過簡單地向對象添加名稱和年齡等變量來定義Person類,並且想要使用officeLife創建特定的Person對象並將其添加到名爲employees的數組中。問題是,當我在officeLife.m中設置Person的名字時(下面顯示)我不確定如何訪問在Person.m中爲我合成的setter/getters。我知道它看起來像:[nameOfPerson firstName: Sam]如果我在Person類中進行調用,但是在不同的類/文件中它看起來像什麼?

#import "officeLife.h" 
#import "Person.m" 


@implementation officeLife 
@synthesize employees; 

- (Person*) hirePerson:(NSString *)name andLastName:(NSString*)name2 
{ 
    if([employees count] == 0) 
    { 
     employees = [[NSMutableArray alloc] init ]; 
    } 
    else 
    { 
     Person *name = [[Person alloc] init]; 
     name.firstName = 

    } 

回答

1

在我回答你的問題,我將提供一些Objective-C的約定的簡短摘要:

的類名首字母大寫。 變量名稱是camelCased。 setter方法採取的形式 - [setFoo:] getter方法採取的形式 - [富]

Person *p = [[Person alloc] init]; 
[p setFirstName:@"Jimi"]; 
// or - p.firstName = @"Jimi" 
// BOTH invoke the same setter method (somewhat unintuitive) 

這是我最好的猜測;我沒有在我面前的人員界面(請張貼它)。考慮到你是Objective-C的新手,我建議你暫時避免@synthesize指令並編寫你自己的setter/getter方法。你會對語言有更好的感覺,但是你也會接觸到保留/複製/發佈策略以及內存引用的潛在問題(重要的是你知道你在對付什麼;))

作爲一個例子:

@interface Person : NSObject { 
    NSString *firstName; 
} 

- (void)setFirstName:(NSString *)s { 
    if (s != firstName) { // this compares memory references, _not_ string content 
     [firstName release]; 
     firstName = [s retain]; 
    } 
} 

- (NSString *)firstName { 
    return firstName; 
} 

在setter方法,條件是重要的,因爲如果由於某種原因,無論是的ivar和參數是指相同的存儲器位置,釋放的ivar將釋放參數,以及,使主機的問題。

此外,在您的代碼中,在else {}塊中,您聲明瞭一個變量'name',它與參數'name'發生「衝突」。雖然這是合法的,但else {}塊中對'name'的引用是指局部變量而不是的參數。您可能想要更改其中一個變量的名稱。

+0

太棒了!這正是我正在尋找的解釋,謝謝 –

+0

太好了,在這種情況下,請記住將其標記爲您接受的答案。 –

相關問題