CS193p Lecture 4 - Foundation, Attributed Strings
消息机制
调用一个实例(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的更多相关文章
- CS193p Lecture 11 - UITableView, iPad
UITableView 的 dataSource 和 delegate dataSource 是一种协议,由 UITableView 实现,将 Model 的数据给到 UITableView: del ...
- CS193p Lecture 10 - Multithreating, UIScrollView
Multithreating(多线程) 网络请求例子: NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithStrin ...
- CS193p Lecture 9 - Animation, Autolayout
Animation(动画) Demo Dropit续 Autolayout(自动布局) 三种添加自动布局的方法: 使用蓝色辅助虚线,右键选择建议约束(Reset to Suggested Constr ...
- CS193p Lecture 8 - Protocols, Blocks and Animation
一.协议(Protocols) 1. 声明协议 @protocol Foo <Xyzzy, NSObject> // ... @optinal // @required //... @en ...
- CS193p Lecture 7 - Views, Gestures
Views 如何绘制自定义图像 Gestures 如何处理用户手势操作 Views 1.它是基本的构造块,代表屏幕上一块矩形区域,定义了一个坐标空间,在此空间中可以绘制,可以添加触控事件: 2.它是分 ...
- CS193p Lecture 6 - UINavigation, UITabBar
抽象类(Abstract):指的是这个类不能被实例化,只能被继承: OC中没有关键词来标明某个类是抽象类,只能在注释中标注一下: 抽象类中的抽象方法,必须是public的,使方法称为public的方法 ...
- CS193p Lecture 5 - View Controller Lifecycle
1. UITextView @property(nonatomic,readonly,retain) NSTextStorage *textStorage 是 NSMutableAttributedS ...
- Foundation 学习笔记
笔记内容 学习笔记-段玉磊 Stanford course Foundation and Attributed Strings Dynamic binding id 是一个指向任何未知对象的指针,(t ...
- (4/18)重学Standford_iOS7开发_框架和带属性字符串_课程笔记
第四课(干货课): (最近要复习考试,有点略跟不上节奏,这节课的内容还是比较重要的,仔细理解掌握对今后的编程会有很大影响) 本节课主要涉及到Foundation和UIKit框架,基本都是概念与API知 ...
随机推荐
- DirectX实现球面纹理映射
http://www.cnblogs.com/graphics/archive/2011/09/13/2174022.html DirectX实现球面纹理映射 介绍 球面纹理映射就是将一个平面纹理映射 ...
- timewrap 算法
何为延迟补偿?如何进行坐标差值?B客户端屏幕上A已经跑到东边了,但是收到服务器说"A正在西边往北跑",B到底该何去何从?我若干年前的一个实现版本,将简明扼要的解决这个问题: 影子跟 ...
- nginx 的启动、停止与重启
详解 ./nginx #打开 nginx nginx -s reload|reopen|stop|quit #重新加载配置|重启|停止|退出 nginx nginx -t #测试配置是否有语法错误 n ...
- [題解] luogu p1220 關路燈
區間dp 题目描述 某一村庄在一条路线上安装了n盏路灯,每盏灯的功率有大有小(即同一段时间内消耗的电量有多有少).老张就住在这条路中间某一路灯旁,他有一项工作就是每天早上天亮时一盏一盏地关掉这些路灯. ...
- ssrs 里 表头 分页后显示
1. 列组,箭头,高级 2.点击行组,静态 3. 设置静态行组 属性
- JAVA Debug调试技术
System.out.println(e),这个方法打印出异常,并且输出在哪里出现的异常,不过它和另外一个e.printStackTrace()方法不同.后者也是打印出异常,但是它还将显示出更深的调用 ...
- javaScript中的闭包原理 (译)
这篇文章通过javaScript代码解释了闭包的原理,来让编程人员理解闭包.它不是写给大牛或使用功能性语言进行编程的程序员的.一旦意会了其核心概念,闭包理解起来并不难.然而,你不可能通过阅读任何有关闭 ...
- kafka基础五
Kafka与Zookeeper Zookeeper存储了什么 kafka架构中角色: 1.producer: 消息生产者,发布消息到 kafka 集群的终端或服务. 2.broker: kafka 集 ...
- DSO的接口文档[转]
本文从别处转来: (开发环境)使用前先注册一下DSOFramer.ocx 操作:将DSOFramer.ocx复制到C:\windows\system32目录下, 开始->运行->regsv ...
- Android Studio项目上传到Jcenter
一.将你要发布的moudle的build.gradle中添加代码,gradle的最后添加 PUBLISH_GROUP_ID = 'com.zzti.fengyongge' PUBLISH_ARTIFA ...