MVC
template->single view application
创建工程的目录,推荐目录home/developer/
所以我只需要weak指针,我只需要它在view里,通常outlet都是weak的
连接输出口后,修改为@ synthesize display=_display; 这种格式
将action连接到.m文件中的@synthesize下
复制按钮,同时也就复制了它的target action(如果有的话)
在.m文件中
@interface ClassA()
@property (nonatomic) BOOL flag;//私有接口
@end
@implementation ClassA
@synthesize flag=_flag;//注意格式
@end
读取_flag只能在setter和getter里进行,不要在代码其他地方使用,用的话用setter和getter
当property创建的时候,值是多少? 0或者nil。发消息给nil什么也不会发生。
确保operandStack为非nil的最佳位置是在它的getter里
在.m文件中
@interface CalculatorBrain()
@property (nonatomic, strong) NSMutableArray *operandStack;
@end
@implementation CalculatorBrain
@synthesize operandStack=_operandStack;
- (NSMutableArray *) operandStack{
if(_operandStack==nil){//这里是需要注意的地方
_operandStack=[[NSMutableArray alloc]init];//延迟实例化
}//这样不可能为nil,也只会alloc一次
return _operandStack;
}
@end
synthesize不会自动分配空间,只会有一个指针变量,初始值为nil,需要你来分配
疑问:实例化,分配空间,release,alloc,init和nil的区别
解答:
对MyClass类的实例化的代码:[[MyClass alloc]init](注意:这只是实例化的一种方式)
alloc 是固定格式,是为对象申请内存空间,即分配空间; init则完成对象的初始化工作
上述两步要写在一起,共同构成实例化。
很多人会通过查看getter来找property实例化的地方。如果没有getter,他们就找不到了,所以最好写上getter
Wrap a primitive type (like double) in an object (using NSNumber)
补充:obj-c和其他语言的不同之处,也就是信息存储方式的不同。obj-c里,我们用的是properties,以前用的是instance variable。我们还是用instance variable的,不过它变得像二等公民了。理解obj-c一件很重要的事就是private和public。区别只是在.h文件里还是在.m文件里。在头文件里的就是public的,不在就是private的