消息机制

  调用一个实例(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. unity调用Android的jar包

    简介 有一些手机功能,Unity没有提供相应的接口,例如震动,例如不锁屏,例如GPS,例如... 有太多的特殊功能Unity都没有提供接口,这时候,我们就需要通过使用Android原生的ADT编辑器去 ...

  2. OPENGL_变换与坐标系

    参考:http://blog.csdn.net/kandyer/article/details/12449973 坐标系 世界坐标系:绝对坐标 物体坐标系:以物体自身为原点的坐标系 摄像机坐标系:以摄 ...

  3. CF888E Maximum Subsequence(meet in the middle)

    给一个数列和m,在数列任选若干个数,使得他们的和对m取模后最大( \(1<=n<=35\) , \(1<=m<=10^{9}\)) 考虑把数列分成两份,两边分别暴力求出所有的可 ...

  4. web前端篇:html基础知识

    目录 1.web前端: 2.HTML概述 2.1HTML介绍 2.2HTML在计算机中如何表现 3.HTML基础语法 4.练习题: 1.web前端: 什么是web? web 就是网页,是一种基于B/S ...

  5. 图片美化增强AI接口调用手册

    在调合合AI平台提供的图片美化增强API接口,API平台链接:https://ai.ccint.com/doc/api/crop_enhance_image, 因为有遇到一些问题,写篇博客记录一下 A ...

  6. 51 Nod 1640 天气晴朗的魔法( Kruskall )

    #include <bits/stdc++.h> typedef long long LL; using namespace std; ; struct node{ LL u,v,w; n ...

  7. 洛谷1941(dp)

    常规的dp,当前有值且碰不到管子就转移,可以连跳的操作我就加了一维表示当前是不是连跳过来的.第二问前缀和即可得(不对啊边走边记录就行了吧我冗了Orz). #include <cstdio> ...

  8. Codeforces Round #390 (Div. 2) B

    Ilya is an experienced player in tic-tac-toe on the 4 × 4 field. He always starts and plays with Xs. ...

  9. 爬虫的两种解析方式 xpath和bs4

    1.xpath解析 from lxml import etree 两种方式使用:将html文档变成一个对象,然后调用对象的方法去查找指定的节点 (1)本地文件 tree = etree.parse(文 ...

  10. leetcode378 Kth Smallest Element in a Sorted Matrix

    思路1: 使用堆. 实现: class Solution { public: int kthSmallest(vector<vector<int>>& matrix, ...