3.5 复习课

现在你应该知道的事...
MVC
Xcode
基础的Objective-C



MVC
Model是独立于UI的
Cards and Decks, not UIButtons and UILabels


View是(目前为止)完全通用的UI元素
UIButton
UILabel


Controller为视图解释模型(反之亦然)
例如:转变isChosen到一个按钮的选中状态
例如:转变isMatched到一个按钮的启用状态
例如:在模型的chooseCardAtIndex:中阐释一个按钮的触碰和转动
Target/Action and Outlets (目前为止)



Xcode
创建项目并且熟练掌握Xcode的界面
隐藏/显示导航区,工具区,助理编辑等等,还有如何在模拟器中运行


编辑
不只是代码,还有你的storyboard,使用属性检查器来编辑按钮、label等
按住Ctrl键拖动来进行连接 (actions and outlets)
右键单击按钮等,以了解并断开连接
看着警告和错误(并去掉它们,希望!)


添加类到你的项目


使用官方文档
很多方法可以得到官方文档,但在关键字处按住Alt键点击是最酷的
一旦出现,搜索,点击链接来找到你想要的东西
一个好的iOS编程,熟悉所有的官方文档是至关重要的



基础的Objective-C
Header .h (公共) 对 Implementation .m (私有)
@interface MyClass : MySuperclass ... @end(仅在头文件)
@interface MyClass( ) ... @end(仅在实现文件)
@implementation ... @end(仅在实现文件)
#import


属性
@property (nonatomic) <类型><属性名>(在这个过程中总是非原子)
他只是setter和getter方法。默认通过编译器一次性的自动为 生成
比单独实例变量更好(惰性实例化,一致性检查,UI更新等)

@property (strong or weak) <一个指向对象的指针类型> <属性名>

@property (getter=<getter 名>) ...

@property (readonly) ... 与 @property (readwrite) ...

使用点符号调用setter和getter,例如,self.cards=... 或if (rank > self.rank) ...

@synthesize <属性名> = _<属性名>(只有当你同时实现setter和getter时)


数据类型和内存
类型:MyClass *, BOOL (YES或NO), int, NSUInteger等(ID还没有完全解释)
所有对象都驻在堆中(即我们只能指向他们)
在堆中对象存储是自动管理的(由strong和weak的声明指导)
惰性实例化(使用@property的getter来分配和初始化对象,@property指向一个“按需”的方式)顺便说一句,不是任何都是惰性实例化:)
如果指针的值是nil(即0),则意味着该指针不指向任何东西。


方法
声明和定义实例方法,如- (int)match:(NSArray *)otherCards
声明和定义类方法,如+ (NSArray *)validSuits
调用实例方法,如[myArray addObject:anObject]
调用类方法,如unsigned int rank = [PlayingCard maxRank]
方法的名称及其参数散置,如[deck addCard:aCard atTop:YES]


NSString
不可变:通常是通过其他字符串的操作或者@“”符号或者类方法创建
例如 NSString *myString = @“hello”
例如 NSString *myString = [otherString  stringByAppendingString:yetAnotherString]
例如 NSString *myString = [NSString stringWithFormat:@“%d%@”, myInt, myObj]

有一个NSMutableString的子类,但我们几乎从来不使用它。
作为替代,我们通过现有的创建他们自己的修改版本,来创建新的字符串。


NSArray
不可变:通常是通过操作其他数组(尚未见到),或@[ ]符号创建
@[@“a”, @“b”] 等同于 [[NSArray alloc] initWithObjects:@“a”, @“b”, nil]
访问数组使用[ ]符号(就像一个普通的C数组),例如myArray[索引]
myArray[index] 作用就像 [myArray objectAtIndex:index]
count方法(返回NSUInteger)会告诉你该数组有多少项(我们在第二章偶然地使用了点符号去调用这个方法)
注意不要去访问数组时越界(会崩溃)。只有last/firstObject免疫
可以包含一些任意类的对象的混搭,没有语法去说它包含了什么

使用NSMutableArray子类,如果需要可变性,这时你获得
- (void)addObject:(id)anObject;
- (void)insertObject:(id)anObject atIndex:(int)index;
- (void)removeObjectAtIndex:(int)index;
通常创建用[[NSMutableArray alloc] init]


在堆中创建对象
分配(对象的alloc)和初始化(一个init方法)总是一起发生
例如 [[NSMutableArray alloc] init]
例如 [[CardMatchingGame alloc] initWithCardCount:c usingDeck:d]

为自己的类编写初始化...
两种初始化方法:指定(每个类一个)和便利(每个类中没有或多个)
只通过注释标记(不以任何方式语言的语法强制执行)
必须调用你的父类的指定初始化(从你的指定初始化)
或者你自己的指定初始化(从自己便利初始化)

这整个概念需要一些时间来适应
幸运的是,因为惰性实例化等,我们不需要在Objective-C初始化那么多
并调用初始化很容易(它只是alloc加上任何初始化,你可以找到你喜欢的)。


其他
快速枚举:for (MyClass *myObject in arrayOfMyObjects) { }
#define
NSLog(@“show this object %@ in the console”, anObject) 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值