2017-02-15 3 views
-2

Я следую за кодом Objective-C. Но я не понимаяОткуда берутся магические методы?

  • что alloc, init в Car *toyota = [[Car alloc] init];?

  • откуда этот метод пришел? setModel

// Car.h

#import <Foundation/Foundation.h> 

@interface Car : NSObject { 
} 

@property (copy) NSString *model; 

- (void)drive; 

@end 

// Car.m

#import "Car.h" 

@implementation Car { 
    double _odometer; 
} 

@synthesize model = _model; 

- (void)drive { 
    NSLog(@"Driving a %@. Vrooooom!", self.model); 
} 

@end 

// main.m

#import <Foundation/Foundation.h> 
#import "Car.h" 

int main(int argc, const char * argv[]) { 
    @autoreleasepool { 
    Car *toyota = [[Car alloc] init]; 

    [toyota setModel:@"Toyota Corolla"]; 
    NSLog(@"Created a %@", [toyota model]); // SQL: Insert into Car value 

    toyota.model = @"Toyota Camry"; // SQL: Update car set model='' 
    NSLog(@"Changed the car to a %@", toyota.model); 

    [toyota drive]; // SQL: Select *from Car 

    } 
    return 0; 
} 

ответ

1

alloc и init унаследованы от NSObject, и они инициализируют ваш новый Car. setModel: автогенерируется с вашего @synthesize d объекта недвижимости model (а также метод model, чтобы получить его значение). Вы можете переопределить эти методы, чтобы выполнить дополнительную работу, если хотите. Кроме того: в современной Objective-C синтаксис доступа к свойствам («точка») обычно предпочтительнее, чем явно вызывающие методы getter/setter.

+0

Почему они написали строку 'NSLog (@" Создана% @ ", [модель toyota]);' но не как 'NSLog (@" Создано% @ ", toyota.model);'? – YumYumYum

+0

Я понятия не имею, это не ваш код? –

+0

вы также можете получить доступ к объекту с механизмом отправки сообщений –

Смежные вопросы