记录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
注意点有二:

  1. controller是老大,可以直接和model,view交谈/控制 model和view也可以和老大说话,但要通过不同的方式

  2. 一个复杂的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的人来说还是有很多注意点和地方

  1. line1 #import .. 也可使用 @import Foundation 但是如果是import自己的header
    file,记得用#(犯过错的我|||)

    1. NSObject is the root obj, defined in the import file
    2. ObjC提倡使用property,而非instance variable,好吧,这是object oriented programing提倡的么,必须要要承认我的OOP没学好
    3. Strong在slides上写的很清楚 “keep the object that this property points to in memory until I set this property to nil (zero)”
    4. NSString就是string,NS的前缀与乔布斯与Next公司的故事有关
    5. *终于一个我熟悉的了, 因为string是object,所以使用pointer,这也是为嘛那么多*,看起来玄乎了,当然引起其玄乎的点还有关于其send message的方式
    6. nonatomic means “access to this property is not thread-safe”.貌似懂了,因为是可以多线程编程,所以需要保证NSString contents的一致性,所以加这个nonatomic,后面多处也添加了这个
    7. @property (nonatomic, getter=isMatched) BOOL matched; getter method可以被重命名,注意setter method并未被重命名
    8. 出现了Array, NSArray
    9. @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
  1. @interface 与 @end之间依旧可以定义一些私有的property和i var,好吧,简写不好
  2. - instance method, +适用于class method,(int)返回值 match: 方法名 NSArray * 参数 otherCards参数名
  3. int score = 0, return score,这是在之前就应该养成的好习惯
  4. esoteric 终极奥义,就是使用method的时候我们是用括号的[message_receiver method_name];
  5. isEqualToString如同Java中无法“==”来比较string一样,因为它们是object
  6. card.contents 利用.来获取property

最终的最终,Slides真是极好的学习/复习材料


yuxue
47 声望2 粉丝

人家是妹子哟~✨


引用和评论

0 条评论