【问题标题】:Where magical methods are coming from?神奇的方法从何而来?
【发布时间】:2017-02-15 21:43:55
【问题描述】:

我遵循了 Objective-C 代码。但是我没看懂

  • Car *toyota = [[Car alloc] init]; 中的allocinit 是什么?

  • 这个方法是从哪里来的? setModel

// 汽车.h

#import <Foundation/Foundation.h>

@interface Car : NSObject {
}

@property (copy) NSString *model;

- (void)drive;

@end

// 汽车.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;
}

【问题讨论】:

    标签: objective-c xcode macos


    【解决方案1】:

    allocinit 继承自NSObject,它们初始化你的新CarsetModel: 是从您的 @synthesized 属性 model 自动生成的(方法 model 也是如此,以获取其值)。如果你愿意,你可以重写这些方法来做额外的工作。另外:在现代 Objective-C 中,属性访问器(“点”)语法通常比显式调用 getter/setter 方法更受欢迎。

    【讨论】:

    • 为什么他们写了NSLog(@"Created a %@", [toyota model]);而不是NSLog(@"Created a %@", toyota.model );
    • 您也可以通过消息发送机制访问属性
    • 是的,当然。然而,点语法通常是首选。
    猜你喜欢
    • 2021-06-19
    • 2015-03-07
    • 1970-01-01
    • 2014-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-29
    • 1970-01-01
    相关资源
    最近更新 更多