W pliku implementacyjnym wszystkie właściwości są oznaczone jako prywatne.
Jakie są więc różnice między nimi:

  1. MójObiekt.m

@interface MyObj ()

@property (nonatomic, strong) NSString *name;

@end

@implementation MyObj

@synthesize name = _name;

// Some other codes to use "name" like self.name or _name

@end


2. MójObiekt.m


@implementation MyObj
{
    NSString *_name;
}

// Some other codes to use _name

@end
0
Kevin 21 październik 2012, 14:24

2 odpowiedzi

Najlepsza odpowiedź

W pierwszym przykładzie otrzymujesz akcesory stworzone dla Ciebie

- (NSString *)name;
- (void)setName:(NSString *)name;

Należy również zauważyć, że w nowszych wersjach Xcode @synthesize jest niejawny.

W drugim przykładzie po prostu masz utworzony ivar.

O ile nie masz specjalnego przypadku, zwykle lepiej jest używać akcesorów, ponieważ zapewnia to większą elastyczność w przyszłości.

3
Paul.s 21 październik 2012, 14:35

Sugerowałbym, abyś zawsze używał @property dla wszystkich członków danych swojej klasy. Mają wbudowane zarządzanie pamięcią, więc nie musisz się o to martwić. Właściwości dodają również cukier składniowy do używania obiektów tej klasy. Więc gdybym miał obj z twojej klasy MyObj, mógłbym po prostu zrobić

obj.name = @"brianSan";

Co byłoby dokładnie tym samym, co

[obj setName: @"brianSan"];

Ponadto dostęp do name w obj można uzyskać za pośrednictwem obj.name, co jest tym samym co [obj name];

Kiedy musisz uzyskać dostęp do metod w obiektach obiektów, łatwiej jest spojrzeć na obj.prop.subprop.subsubprop niż na [[[obj prop] suprop] subsubprop]

2
brianSan 21 październik 2012, 14:42