Вызов метода установки объекта из отдельного класса - PullRequest
0 голосов
/ 24 июня 2011

Я не новичок в кодировании, но просто возвращаюсь к этому.Я изучал Java в школе, но я начинаю изучать Цель C. По сути, простите, насколько коррективен этот вопрос.Я не мог найти ничего такого простого с помощью поиска, поэтому я спрашиваю.

В любом случае, у меня есть код моего файла officeLife.m.Мои два основных класса, с которыми я работаю, это Person.h / .m и officeLife.h / .m.Я попытался определить класс Person, просто добавив к объекту переменные, такие как name и age, и хотел использовать officeLife для создания и добавления определенных объектов Person в массив, называемый employee.Проблема в том, что когда я иду, чтобы установить имя для Person в officeLife.m (показано ниже), я не уверен, как получить доступ к сеттерам / получателям, которые были синтезированы для меня в Person.m.Я знаю, что это выглядело бы так: [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 Ответ

1 голос
/ 24 июня 2011

Прежде чем ответить на ваш вопрос, я собираюсь предложить краткое резюме нескольких соглашений Objective C:

Имена классов пишутся с заглавной буквы. Имена переменных в CamelCased. Методы установки принимают форму - [setFoo:] Методы получения получают в виде - [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;
}

В методе сеттера условие важно, потому что если по какой-то причине и ивар и параметр ссылаются на одну и ту же область памяти, то при освобождении ивара этот параметр также будет освобожден, вызывая множество проблем.

Кроме того, в своем коде в блоке else {} вы объявили переменную «name», которая «конфликтует» с параметром «name». Хотя это допустимо, любые ссылки на 'name' в блоке else {} ссылаются на локальную переменную, , а не параметр. Вы можете изменить имя одной из переменных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...