从单独的类调用对象的setter方法

时间:2011-06-24 00:18:11

标签: objective-c command-line

我不是新编码,但只是回到它。我在学校学习Java,但是我开始学习Objective C.基本上,请原谅这个问题的补救方法。我通过搜索找不到任何这么简单的东西,这就是我问的原因。

无论如何,我在officeLife.m文件的代码下面。我正在使用的两个主要类是Person.h / .m和officeLife.h / .m。我试图通过简单地向对象添加诸如name和age之类的变量来定义Person类,并且想要使用officeLife来创建特定的Person对象并将其添加到名为employees的数组中。问题是当我在officeLife.m中设置Person的名称时(如下所示)我不知道如何访问在Person.m中为我合成的setter / getter。我知道它看起来像:[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 个答案:

答案 0 :(得分:1)

在回答你的问题之前,我将简要介绍一些Objective-C惯例:

班级名称是大写的。 变量名称是camelCased。 Setter方法采用的形式 - [setFoo:] Getter方法采用以下形式 - [foo]

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

这是我最好的猜测;我面前没有你的Person界面(请发布)。考虑到您是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'的任何引用都引用了局部变量, not 参数。您可能想要更改其中一个变量的名称。