昨天写了一个计算器 出现一个bug,导致对象为null并且调试也无法找出错误
最后终于发现原来是getter的函数名写错了
所以导致初始化失败。
//
// CalculatorViewController.m
// Calculator
//
// Created by linqianqiu on 12-7-19.
// Copyright (c) 2012年 __MyCompanyName__. All rights reserved.
//
#import "CalculatorViewController.h"
#import "CalculatorBrain.h"
@interface CalculatorViewController()
@property (nonatomic) BOOL userIsInTheMiddleOfEnteringANumber;
@property (nonatomic, strong) CalculatorBrain *brain;
@end
@implementation CalculatorViewController
@synthesize display = _display;
@synthesize userIsInTheMiddleOfEnteringANumber = _userIsInTheMiddleOfEnteringANumber;
@synthesize brain = _brain;
- (CalculatorBrain *)barin {
if (!_brain) {
_brain = [[CalculatorBrain alloc] init];
}
return _brain;
}
- (IBAction)digitPressed:(UIButton *)sender {
NSString* digit = sender.currentTitle;
if (self.userIsInTheMiddleOfEnteringANumber) {
self.display.text = [self.display.text stringByAppendingFormat:digit];
} else {
self.display.text = digit;
self.userIsInTheMiddleOfEnteringANumber = YES;
}
}
- (IBAction)operationPressed:(UIButton *)sender {
if (self.userIsInTheMiddleOfEnteringANumber) [self enterPressed];
double result = [self.brain performOperation:sender.currentTitle];
NSString* resultString = [NSString stringWithFormat:@"%g", result];
self.display.text = resultString;
}
- (IBAction)enterPressed {
[self.brain pushOperand:[self.display.text doubleValue]];
self.userIsInTheMiddleOfEnteringANumber = NO;
}
- (IBAction)clearPressed {
self.display.text = @"0";
}
@end
分享到:
相关推荐
在Objective-C中,对象的初始化和实例变量的作用域是编程中的关键概念,对于理解和创建健壮的iOS和macOS应用程序至关重要。 首先,让我们深入理解对象的初始化过程。在Objective-C中,初始化通常涉及`init`方法。每...
在Objective-C中,懒加载是一种优化技术,它推迟了对某些资源或对象的初始化,直到它们真正被使用时才进行。这种策略可以避免在应用启动时不必要的内存消耗,尤其对于大型或者复杂对象,这种优化尤为关键。懒加载...
在Objective-C中,对象是通过创建类的实例来实现的,使用`init`方法初始化。 2. **类**:类是对象的蓝图,定义了一组共享的属性和方法。在Objective-C中,类使用`@interface`关键字声明,`@implementation`关键字...
方法名前缀“init”通常用于初始化对象,而“dealloc”用于清理对象资源。 Objective-C引入了协议(Protocols),这是一种类似Java和C#的接口概念。协议定义了一组方法,但不包含实现。类可以遵循一个或多个协议,...
- 学习如何正确地遵循初始化协议,以确保对象被正确地创建和销毁。 7. **多态(Polymorphism)**: - Objective-C的多态基于消息发送机制,使得子类可以替换父类的方法实现。 - 使用`id`类型或协议类型可以充分...
在Objective-C中,对象必须通过初始化才能使用。 ##### 示例 ```objective-c MyClass *obj = [[MyClass alloc] init]; ``` #### 七、存取器 存取器(Accessors)是用于获取和设置对象属性的方法。 - **getter** ...
`alloc`分配内存,`init`初始化对象。 3. **类和对象**: 类是对象的模板,定义了对象的属性(ivar)和方法(method)。对象是类的实例,通过类可以创建多个对象。 4. **属性(Property)**: Objective-C 提供...
同时,也可以使用初始化方法列表来初始化对象。 存取器 存取器是Objective-C中用于访问和修改对象私有变量的方法。开发者通常会创建一系列的 getter 和 setter 方法来控制对对象内部状态的访问。 继承 Objective-C...
3. **构造方法(Init Methods)**:初始化方法如`-init`,`-initWithCoder:`和`-initWithNibName:bundle:`用于创建并设置新对象的状态。 4. **分类(Categories)**:使用`+load`和`+initialize`方法,可以在类加载...
对于没有默认初始化器的情况,可以使用Objective-C的初始化方法名称来调用它们,如`init(coder:)`。 **访问属性(Accessing Properties)** Swift可以直接访问Objective-C类的属性,如同访问Swift属性一样。但是需要...
从标签 "objective-c" 中我们可以得知这份文档是专门关于Objective-C语言的,而不仅仅是一个普通的编程速查表。 接下来,我们深入到文件提供的内容中,可以发现以下几个重要知识点: 1. 类的定义和实现: - 在...
例如,你可以找到如何创建并初始化对象、如何使用属性和方法、如何实现协议以及如何处理内存管理的实例。 总之,Objective-C作为iOS开发的重要语言,掌握其基本语法和特性对于开发高质量的iOS应用至关重要。通过本...
7. **alloc和init**:`alloc`方法用于分配内存并初始化对象,`init`方法则用于进一步配置对象的实例变量。 8. **类的结构**:一个Objective-C类通常包含接口(.h文件)和实现(.m文件)。接口文件声明实例变量和...
Objective-C是一种面向对象的编程语言,它是在C语言的基础上扩展而成的,主要应用于苹果的操作系统(如iOS和macOS)的软件开发。尽管描述中提到这是一种“非常奇葩”的语言,但实际上,Objective-C具有清晰简洁的...
自定义初始化器允许在创建对象时传递参数,并执行额外的初始化操作: ```objective-c -(id)initWithParam:(anytype)param{ if ((self = [super init])) { self.propertyName = param; } return self; } ``` ##...
Objective-C支持C语言的所有特性,并增加了面向对象的特性,如类、对象、消息传递等。Objective-C的主要优势在于它强大的类库以及简洁高效的语法结构。 #### 二、程序整体语法结构 Objective-C程序通常由头文件(....
4. 对象初始化和析构:Objective-C 2.0改进了对象初始化过程,引入了`-init`方法的快速失败机制,以及`+load`和`+initialize`方法,用于类加载时的自定义行为。 三、内存管理与ARC Objective-C 2.0引入了自动引用...