记录Stanford CS193p的一些笔记和感想
非常传统的第一课
讲了一些课务信息
其中提到了 Prerequisites
要求学生上过CS106A/B CS107
其实Stanford非常之善良/良善,如果愿意寻找
这三门课iTunes U上都有,并且对于CS106A/B很容易找到Assignments和homework
如果完全没有编程基础,可以先跟这两门课
btw,CS106A是我看过的最好笑的CS入门课,深度也很合适,举例就是直到CS106B才出现递归的题目和概念
我上过这两门课,CS106B最后跟的有点马虎,但是还是想尝试一下,硬着头皮来吧,试试CS193p
叨叨逼结束
MVC, model-view-controller
我的理解是可能剧跟object-oriented programming类似,一种设计/编程概念
正如Class分割method和property一样
要构建的东西也被分为 model、view、controller
注意点有二:
controller是老大,可以直接和model,view交谈/控制 model和view也可以和老大说话,但要通过不同的方式
一个复杂的App可以有多个MVC模型?但注意它们合作?的方式
后面的flipCard这个App能知道(个人理解):
model - 我们设计的
controller - 系统生成viewcontroller
view - Interface Builder一大堆,拖拽生成
Objective-C
我不得不说其语法看起来真的还蛮esoteric的,故意挑了一个和它感觉匹配的词
但是白胡子老爷爷讲的真不错
而且Xcode的自动补全功能也让人稍不那么的迷茫
而且lecture的slides做的极棒,非常有助于课后复习
我也尝试来解读一下
objectivec
//card.h file # import <Foundation/Foundation.h> @interface Card : NSObject @property (strong,nonatomic) NSString *contents; @property (nonatomic, getter=isChosen) BOOL chosen; @property (nonatomic, getter=isMatched) BOOL matched; - (int)match:(NSArray *)otherCards; @end
对于第一次接触Xcode/Obj-C的人来说还是有很多注意点和地方
-
line1 #import .. 也可使用 @import Foundation 但是如果是import自己的header
file,记得用#(犯过错的我|||)- NSObject is the root obj, defined in the import file
- ObjC提倡使用property,而非instance variable,好吧,这是object oriented programing提倡的么,必须要要承认我的OOP没学好
- Strong在slides上写的很清楚 “keep the object that this property points to in memory until I set this property to nil (zero)”
- NSString就是string,NS的前缀与乔布斯与Next公司的故事有关
- *终于一个我熟悉的了, 因为string是object,所以使用pointer,这也是为嘛那么多*,看起来玄乎了,当然引起其玄乎的点还有关于其send message的方式
- nonatomic means “access to this property is not thread-safe”.貌似懂了,因为是可以多线程编程,所以需要保证NSString contents的一致性,所以加这个nonatomic,后面多处也添加了这个
- @property (nonatomic, getter=isMatched) BOOL matched; getter method可以被重命名,注意setter method并未被重命名
- 出现了Array, NSArray
- @property (strong,nonatomic) NSString *contents;这一句话后面包含了很多代码
objectivec
@synthesize contents = _contents; - (NSString *)contents { return _contents; } - (void)setContents:(NSString *)contents { _contents = contents; }
Header file就是这样
objectivec
#import "Card.h" @interface Card() @end @implementation Card - (int)match:(NSArray *)otherCards { int score = 0; for (Card *card in otherCards) { if ([card.contents isEqualToString:self.contents]) { score = 1; } } return score; } @end
- @interface 与 @end之间依旧可以定义一些私有的property和i var,好吧,简写不好
- - instance method, +适用于class method,(int)返回值 match: 方法名 NSArray * 参数 otherCards参数名
- int score = 0, return score,这是在之前就应该养成的好习惯
- esoteric 终极奥义,就是使用method的时候我们是用括号的[message_receiver method_name];
- isEqualToString如同Java中无法“==”来比较string一样,因为它们是object
- card.contents 利用.来获取property
最终的最终,Slides真是极好的学习/复习材料
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。