消息机制

  调用一个实例(instance)的方法(method),就是向该实例的指针发送消息(message),实例收到消息后,从自身的实现(implementation)中寻找响应这条消息的方法。

id

  id myObject;

声明了一个指针,类型是id,id表示它是一个指针(不用id *)指向一个我们不知道类型的对象。

异常和未知选择器(P60)

  OC的对象都有一个名为 isa 的实例变量,指向创建该对象的类。

  对象职能响应类中具有的相应方法的信息。但是xcode在编译时无法判断某个对象是否能响应特定的信息,对象的类型只能在运行时确定。

  如果向某个对象发送其无法响应的消息,只会有warning,编译仍然可以通过,但是运行时就会抛出异常(exception)。

1、id

2、id <UIScrollViewDelegate> scrollViewDelegate

3、NSSting

第1类,id,我们对它指向的类型毫无所知;

第3类,比如NSSting,我们完全知晓;

而第2类,id加上一个协议(尖括号框起来),表示我们虽然对它指向的类型不知,但是它必须实现协议中制定的方法;

introspection(内省)

isKindOfClass: 对象是否属于某一类(包含类及其子类)

  [obj isKindOfClass:[你要考虑的类 class]]

isMemberOfClass: 对象是否是某一类(仅类本身,不包含子类)

respondsToSelector: 对象能否对某一方法做出反应

  [obj respondsToSelector:@selector(shootAt:)]

- (id)copy  

- (id)mutableCopy

NSArray、NSDictionary等实现了copy、mutableCopy(NSObject并未实现)

将copy无论发送给什么对象,返回的始终是不可变对象;

将mutableCopy无论发送给什么对象,返回的始终是可变对象;

NSArray(重要)

一经创建就无法改变,无法增加元素,也无法删除元素;

最常见的创建方法:@[元素A, 元素B, 元素C...]

count、objectAtIndex:、lastObject、firstObject

NSMutableArray

+ (instancetype)arrayWithCapacity:(NSUInteger)numItems;

+ (instancetype)array;  // [NSMutableArray array] 等同于 [[NSMutableArray alloc] init]

- (void)addObject:(id)anObject;

- (void)insertObject:(id)anObject atIndex:(NSUInteger)index;

- (void)removeObjectAtIndex:(NSUInteger)index;

可以用下标来简便表示

NSNumber

初始化方法

+ (NSNumber *)numberWithInt:(int)value;

NSNumber *three = @3;

NSNumber *underline = @(NSUnderlineStyleSingle);  // 枚举 enum

NSData

二进制数据包

NSDate

相关的:NSCalendar, NSDateFormatter, NSDateComponents

NSSet

其中的元素是hash存储的,查找起来比NSArray高;

NSDictionary(重要)

初始化方法(NSString是最常用的key)

NSDictionary *colors = @{ @"green": [UIColor greenColor],

@"blue":  [UIColor blueColor],

@"red":   [UIColor redColor]

};

- (id)objectForKey:(id)aKey;

color["blue"]

NSMutableDictionary

- (void)setObject:(id)anObject forKey:(id <NSCopying>)aKey;

Property List

NSUserDefaults

在真实的App开发中,我们常常将这些静态元素存放在外部(如菜谱列表)文件或数据库或其它地方。在IOS编程中,有一种类型的文件,成为 Property List. 这一类型的文件通常在Mac OS 和 iOS中发现,用来存放简单的结构数据(如应用程序设置)

我觉得可以理解为配置文件,通常是轻量级的,但是又不宜写在代码中的;

http://alan-hjkl.iteye.com/blog/1678505

NSRange

typedef struct{

NSUInteger location;

NSUInteger length;

} _NSRange;

typedef NSRange *NSRangePointer;

iOS中不会将struct放到堆中,这个 NSRangePointer 用于引用调用 range

UIColor

UIColor *color = [UIColor greenColor];

newColor = [color colorWithAlphaComponent:0.3];

// alpha 表示透明度,1表示不透明,0表示全透明

UIFont

系统推荐字体(建议用于正文)

UIFont *font = [UIFont preferredFontForTextStyle:UIFontTextStyleBody];

"system" fonts(建议用于按钮等)

+ (UIFont *)systemFontOfSize:(CGFloat)fontSize;

+ (UIFont *)boldSystemFontOfSize:(CGFloat)fontSize;

UIFontDescriptor

NSAttributedString

- (NSDictionary *)attributesAtIndex:(NSUInteger)location effectiveRange:(NSRangePointer)range;

http://www.cnblogs.com/whyandinside/archive/2013/12/27/3493475.html

NSAttributedString管理一个字符串,以及与该字符串中的单个字符或某些范围的字符串相关的属性。比如这个字符串“我北京天安门”,“我”跟其他字符的颜色不一样,而“北京”与其他的字体和大小不一样,等等。NSAttributedString就是用来存储这些信息的,具体实现时,NSAttributedString维护了一个NSString,用来保存最原始的字符串,另有一个NSDictionary用来保存各个子串/字符的属性。

NSAttributedString * attStr = ...

NSString *str = [attStr string];

如上所说,NSAttributedString维护了一个NSString,可以用string的读方法获取到这个原始字符串;

UIButton

- (void)setAttributedTitle:(NSAttributedString *)title forState:(UIControlState)state;

UILabel

@property(nonatomic,copy)   NSAttributedString *attributedText;

CS193p Lecture 4 - Foundation, Attributed Strings的更多相关文章

  1. CS193p Lecture 11 - UITableView, iPad

    UITableView 的 dataSource 和 delegate dataSource 是一种协议,由 UITableView 实现,将 Model 的数据给到 UITableView: del ...

  2. CS193p Lecture 10 - Multithreating, UIScrollView

    Multithreating(多线程) 网络请求例子: NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithStrin ...

  3. CS193p Lecture 9 - Animation, Autolayout

    Animation(动画) Demo Dropit续 Autolayout(自动布局) 三种添加自动布局的方法: 使用蓝色辅助虚线,右键选择建议约束(Reset to Suggested Constr ...

  4. CS193p Lecture 8 - Protocols, Blocks and Animation

    一.协议(Protocols) 1. 声明协议 @protocol Foo <Xyzzy, NSObject> // ... @optinal // @required //... @en ...

  5. CS193p Lecture 7 - Views, Gestures

    Views 如何绘制自定义图像 Gestures 如何处理用户手势操作 Views 1.它是基本的构造块,代表屏幕上一块矩形区域,定义了一个坐标空间,在此空间中可以绘制,可以添加触控事件: 2.它是分 ...

  6. CS193p Lecture 6 - UINavigation, UITabBar

    抽象类(Abstract):指的是这个类不能被实例化,只能被继承: OC中没有关键词来标明某个类是抽象类,只能在注释中标注一下: 抽象类中的抽象方法,必须是public的,使方法称为public的方法 ...

  7. CS193p Lecture 5 - View Controller Lifecycle

    1. UITextView @property(nonatomic,readonly,retain) NSTextStorage *textStorage 是 NSMutableAttributedS ...

  8. Foundation 学习笔记

    笔记内容 学习笔记-段玉磊 Stanford course Foundation and Attributed Strings Dynamic binding id 是一个指向任何未知对象的指针,(t ...

  9. (4/18)重学Standford_iOS7开发_框架和带属性字符串_课程笔记

    第四课(干货课): (最近要复习考试,有点略跟不上节奏,这节课的内容还是比较重要的,仔细理解掌握对今后的编程会有很大影响) 本节课主要涉及到Foundation和UIKit框架,基本都是概念与API知 ...

随机推荐

  1. ajax请求过程

    1.什么是ajax AJAX=Asynchronous JavaScript and XML  =====>异步的javascript和xml AJAX是在不重新加载整个页面的情况下与服务器交换 ...

  2. css 所有选择器 实例与总结

    目录 什么是选择器? 选择器都有那些呢? 标签选择器 ID选择器 类选择器 后代选择器 子代选择器 组合选择器 交集选择器 相邻兄弟选择器 通用兄弟选择器 属性选择器 伪类选择器 什么是选择器? 在c ...

  3. hyperledger fabric 1.0.5 分布式部署 (二)

    环境:2台 ubuntu 16.04 角色列表 角色 IP地址 宿主端口 docker端口  peer0.org1.example.com  47.93.249.250  7051  7051  pe ...

  4. webSocket的学习以及问题的解决

    查过很多资料,感觉大部分都讲的不够详细,做为一个新人我从webSocket的基本开始学起, 首先webSocket的原理其实和Http差不多,但是由于Http只能被动的去向服务器请求消息,导致缺点太明 ...

  5. windows如何搭建redis集群

    操作系统:win10 64位 redis版本:3.2.1-x64 ruby版本:2.5.1-1-x64 rubygems版本:2.7.6 今天突然想简单的搭建一个redis的集群,因为系统是Windo ...

  6. python错误之RuntimeError: dictionary changed size during iteration

    pythonn报错信息: C:\Users\Administrator\AppData\Local\Programs\Python\Python36-32\python.exe C:/Users/Ad ...

  7. Flask (一) 简介

    Flask简介 Flask是一个基于Python实现的Web开发‘微’框架 'MicroFramework' Django是一个重型框架 官方文档: http://flask.pocoo.org/do ...

  8. Jasper_crosstab_measure_display a value of field in crosstab total row

    1.create a measure <measure name="myField" class="java.lang.String"> <m ...

  9. C. On Number of Decompositions into Multipliers 组合数学

    http://codeforces.com/contest/397/problem/C 给出n个数字,m = a[1] * a[2] * a[3] ... * a[n] 要求把m分成n个不一样的乘积, ...

  10. C#实现MD5WITHRSA签名

    这是很久以前的写的一篇博客了,今天把他重新找出来整理一下发布到博客园 当时对接银联的时候搞了很久都没搞出来,后来一个偶然的机会发现类似的一个代码参考了一下终于弄好了 这段代码主要是实现了C#服务端对接 ...