- Introspection(内省)
主要通过"id"来进行类型校验
应用范围: array校验. mvc中盲通信
例如在一个NSArray(假设名称为tmpArray)里校验某元素是否为UIButton
for(id item in tmpArray)
{
if ([item isKindOfClass : [UIButton Class]]) {
/* code */
UIButton * buttonItem = (UIButton *)item;
}
}
- SEL定义
SEL是objective-c对selector(选择器)的类型定义.
(跟BOOL一样, 都是typedef出来的).
应用范围比较广. 很强大
可以对NSObject使用, 也可以针对NSArray使用(可以少些forin循环了),也可以应用在绑定UI控件的功能上(这样就不用control+鼠标拖拽方式绑定控件了?).
eg:
SEL shootSelector = @selector(shoot);
SEL shootAtSelector = @selector(shootAt:);
SEL moveToSelector = @selector(moveTo:withSth);
NSObject:
[obj performSelector:shootSelector];
[obj preformSelector:ShootAtSelector withObject:coordinate];
NSArray:
[array makeObjectsPerformSelector:shootSelector];
[array makeObjectsPerformSelector:shootAtSelector withObject:target];
UIButton: -(void)addTarget:(id)anObject action:(SEL)action ...;
[button addTarget:Self action:@selector(didPressed:)...];
Foundation:
NSObject.
最基础的类, 提供了内省检查, description等一些基础功能.
NSString.
字符串类
NSData.
数据类, 比如存储二进制数据.
NSDate.
日期类. 使用时要根据具体情况具体解析格式.
NSNumber.
数字类(对象代理器 object wrapper). 可存int, float, double, enum, 任何计算得到原始类型的数据.
NSNumber * tmpNumber = @3;
= @3.1;
= @3.14;
= @(NSUnderLineStyleSingle);
= @[card match:@[otherCard]];
此@()使用方式均为自动装箱.
NSValue.
数据类(对象代理器 object wrapper). 可代理非object, 非原始类型数据, 例如structure. 转化为字符串较好. 具体应用范围待详查.
NSArray.
数组类. 可变数组为:(NSMutableArray)
NSSet
集合类. 可变集合为:(NSMutableSet). (经过hash处理,可高速返回内含多少个对象,比array有一些优势)
NSOrderedSet.
有序集合类. 可变集合为:(NSMutableOrderSet).
NSDictionary.
字典类. 可变集合为:(NSMutableDictionary).
这里的key和value均为strong类型.
key最好为string 这样hash处理比较好.
定义为:
NSDictionary * colors = @{key1:value1, key2:value2};
NSDictionary * colors = @{ @"blue" : [UIColor blueColor],
@"red" : [UIColor redColor],
@"green" : [UIColor greenColor]};
可以直接以map形式访问:
UIColor * readColor = colors["red"];
也可以用:
- (id) objectForKey: (id) key;
mutableDictionary可以使用 alloc/init方式创建, 也可以: + (id)dictionary.类方法方式创建.
Property List(属性列表).
属性列表就是集合的集合(collection of collections).
必须是NSArray 或 NSDictionary.
为什么要使用属性列表?
因为ios sdk里有一堆方法都要用到属性列表..
NSUserDefaults.
轻量级的存储属性列表的东西~
仅供存一些不复杂的基础的数据.
进程中只有一个实例化的NSUserDefaults.
使用如下方式获取以及赋值,提交:
[[NSUserDefaults standardUserDefaults] setArray: rvArray for key:@"RecentlyViewed"];
[[NSUserDefaults standardUserDefaults] synchronize];
NSRange
结构体 内含location以及length. 用来标识范围
UIColor
用来表现颜色的对象. 支持rgba.
UIFont.
字体类. 可用系统字体, 用户自定义字体以及NSAttributedString来丰富字体表现
(最好不要在用户上下文里用系统字体)
UIFontDescriptor
可以在已有的UIFont中获取到这个描述方法, 配合自定义的NSAttributedString来进行修改字体效果.
NSAttributedString
并不是NSString的子类, 只是一个拥有一堆NSString属性的集合字典.
(可修改的版本为:NSMutableNSAttributedString)
属性都有哪些呢? 颜色, 字体, 下划线, 描边等等都算属性.
获取方式如下:
- (NSDictionary *) attributesAtIndex : (NSUInteger) index
effectiveRange: (NSRangePointer) range;
NSMutableAttributedString
使用方式:
- (void)addAttributes : (NSDictionary *)attrubutes
range : (NSRange) range;
- (void)setAttributes : (NSDictionary *)attrubutes
range : (NSRange) range;
- (void)removeAttributes : (NSDictionary *)attrubutes
range : (NSRange) range;
UILable
显示文字标签用.