Создание объекта - Objective-C - PullRequest
       40

Создание объекта - Objective-C

3 голосов
/ 05 августа 2011

Задача

Я пытаюсь создать объект в Objective-C.Я знаю, как это сделать, но у меня есть несколько вопросов относительно методов в файле реализации.

Объект:

@interface Program : NSObject {
    NSString *sid;
    NSString *le;
    NSString *sd;
    NSString *pid;
    NSString *n;
    NSString *d;
    NSString *url;
}

@property (nonatomic, retain) NSString *sid;
@property (nonatomic, retain) NSString *le;
@property (nonatomic, retain) NSString *sd;
@property (nonatomic, retain) NSString *pid;
@property (nonatomic, retain) NSString *n;
@property (nonatomic, retain) NSString *d;
@property (nonatomic, retain) NSString *url;

@end

Вопрос

Я должен только реализовать dealloc и init .. Правильно ли я в этом?

Кроме того, у меня нет специальных инициализаций, поэтому я должен оставить метод по умолчанию initкак следует?

- (id)init
{
    self = [super init];
    if (self) {
        // Initialization code here.
    }

    return self;
}

Ответы [ 6 ]

5 голосов
/ 05 августа 2011

Вам необходимо синтезировать свойства, и если вам не нужна какая-либо пользовательская инициализация, вы можете оставить метод init без изменений. На самом деле здесь нет необходимости реализовывать init. Но в dealloc вам нужно освободить строки.

@implementation Program

@synthesize sid;
// ... synthesize others

- (void)dealloc {
    [sid release];
    // ... release others

    [super dealloc];
}

@end
3 голосов
/ 05 августа 2011

Я могу ошибаться, и я уверен, что кто-то исправит меня;), но если вы не выполняете никаких специальных инициализаций, вам не нужен метод init.

1 голос
/ 05 августа 2011

если вы создаете свойства (, вы должны синтезировать , чтобы компилятор автоматически генерировал для нас методы получения и установки), а если вы выполняете пользовательскую инициализацию, вам нужно запомнить ключевое слово self

-(id)init{
  self.sid = @"SID" //Without the self object & the dot we are no longer sending 
                     //an object a message but directly accessing ivar named sid
 }

 - (void)dealloc {
     self.sid = nil;
     [super dealloc];
   }
1 голос
/ 05 августа 2011

Я должен только реализовать dealloc и init .. Я прав в этом?

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

Каждое из свойств должно быть освобождено в вашем -dealloc

0 голосов
/ 05 августа 2011

Вам нужно реализовать dealloc и выпустить все ваши ивары. Кроме того, не забудьте @synthesize ваши свойства!

0 голосов
/ 05 августа 2011

Вам нужно реализовать - dealloc и - init только если у вас есть снос или настройка. Если у вас его нет, вам не нужно его реализовывать, потому что по умолчанию унаследованы от NSObject.

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