您的位置:首页 > 移动开发 > Objective-C

Objective-c小结

2014-04-13 15:19 204 查看
MSRange系统提供的范围结构体对应的函数NSMakeRange(1,3);
CG前缀代表集合图形的数据类型 CGPoint CGSize CGRest(坐标和大小)对应的函数分别是CGPointMake();CGSizeMake();CGRectMake();
关于NSInteger int用法和java一致
isEqualToString 返回的Bool类型
compare返回的enum枚举类型 如下
enum
{
NSOrderedAscending=-1,
NSOredSame,
NSORderdDescending
}返回上面3个值其中的一个
还有一种区分大小写的比较方法 例如[things compare:thing2 option:NSCaseInsensitiveSearch|NSNumericSearch]
其中 NSCaseInsensitiveSearch不区分大小写
NSNumericSearch比较字符串值,比如10会排在9前面
NSListeralSearch 进行完全比较,区分大小写
hasPrefix
hasSuffix这2个返回bool
rangeOfString 匹配是否为子串没有返回一个枚举NSRange 没有找到range.location则等于NSNotFound
NSString是不可改变的,MSMutableString是可以改变的并且他是NSString的子类
创建的方法[MSMutableString stringWithCapacity 42]
appendString
appendFormat
deleteCharactersInRange
ranfeofString

NSArray *array=[NSArray arrayWithObject:.......];//nil结束
NSArray *array=@[......];//不需要nil结束
获得指定对象可以是 objectAtindex 或者arrays[i] 长度是count方法
排序 NSArray *a=[array sortarrayUsingComparator:^(NSString *a,NSString *b){return [a compare:b];}]

NSMutableArray
创建的方法[NSMutableArray arrayWithCapacity 42]
addObject
removeObjectAtIndex

枚举
NSEnumerator
[array objectEnumerator] 也可以reversObjectEnumerator
nextObject下一个 直到nil结束

快速枚举
类似java
for(String *string in array)
{
//
}

代码库枚举
[array enumerateObjectsUSingBlock:^(NString *string,NSUintefer index,Bool *stop){
NSLog()}]

NSDictionary 字典类似于MAP
NSString对应一个值(通常)
NSDictionary dictionary=[NSDictionary dicionaryWithObjectArrays :objetc1,key......];
objectForkey或者tires[key]

NSMutableDictionary
创建[NSMutableDictionary dictionaryWithCapacity 42]
-(void) setObject:(id)object forKey:(id)key
removeObjectForKey

NSArray和NSDictionary只能存储对象不能是int 类型等
可以转化成NSNumber
such as
numberWithInt:2或者NSNumber value=@2
当然也可以intValue转换

结构体也可以
NSRect rect=NSMakeRect(1,2,3,4);
NSValue *value=[NSValue valueWithByte:&rect objCType :@encode(NSRect)];
value=[array objectAtIndex :0] [ value getValue:&rect]
NSPoint NSSize NSRect 对应的方法
+valueWithPoint 转成NSValue方法
-pointValue转成point

集合等不能存放nil但是可以NSNull
NSNULL null实例化

NSFileManager *manager;
manager=[NSFileManager defaultManager];
NSString *home;
home=[@"~" stringByExpandingTildeInPath];
NSLog(home);
NSDirectoryEnumerator *director;
director=[manager enumeratorAtPath:home];
while(home=[director nextObject])
{
NSLog([home pathExtension]);
}

NSFileManager *manager;
manager=[NSFileManager defaultManager];
NSString *home;
home=[@"~" stringByExpandingTildeInPath];
NSLog(home);
NSEnumerator *director;
director=[manager enumeratorAtPath:home];
for(NSString *string in director)
{
NSLog([string pathExtension]);
}

对象初始化
[Cricle new] 或者[[Circle alloc] init]

@property
@synthesize
@dynamic企图调用不存在的get set方法将报错
@selector(setSize:) 相信选择器 方法名有2点无2点取决有没有参数 225(OBJECT-C)后面一班跟着Object 参数
@encode(NSRect) 类型

是否能响应方法repondsToselector方法

像方法发送消息:
timer=[NSTimer scheduledTimerWithTimeInteral:3.0 target:self selector:@selector(handle:) userInfo:nil repeats:YES];

代码块
int (^hehe)(int i)=^(int i){return i};

直接用   ^(int i){return i};

//判断是否实现了onClick:btn_id:方法
if([[self listener] respondsToSelector:@selector(onClick:btn_id:)])



并发性

1.后台运行方法 

NSObject 有个perforSelectorInBackground:withObject:(只能有一个参数而且方法中都有自动释放池(@autoreleasepool{}))

队列(连续,并发,主队列)

连续 dispath_queue_t my;

my=dispath_queue_creat("name",NULL);

并发

my=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);第一个参数有先级还有参数尾号为HIGT he low

主队列

my=dispatch_get_current_queue(void);

上下文

dispatch_set_context(my,(_bridge_retained void *)context);

context=(_bridge NSMutableDictionart *)dispatch_get_context(my);

最后要启用上下文自己写终结函数


添加任务

dispatch_async_(my,canshu,fangfaming或者duilie)

暂停dispatch_suspend(my)重新dispatch_resume(my);


操纵队列(现成的)

针对方法的    NSInvocationOperation

return [[NSInvocationOperation alloc] inintWithTarget:self selector:@selector(fangf:) object:data];

针对代码快

NSBlockOperation *he=[NSBlockOperation blockOperationWithBlock:^{}];

addExecetionBlock添加    

向队列添加操作

NSOperation *oe=[[NS... alloc] init];

[oe addOperation:my];

[oe addOperationWithBlock:^(){NSLog.....}];


文件加载和保存

NSDate

初始化 data

间隔的时差 dateWithTimeIntervalSinceNoew:-(24*60*60)

NSData

[NSData dataWithBytes:length:len+1]

属性文件有个writeTofile:地址  atomically:YES属于xml文件

得到属性类[NSArray arrayWithContentsofFile:地址];


NSCoding协议

encodeWithCoder:(NSCoder *)coder

{

[coder encodeObject:name forKey:@"name"]

}

inintWithCoder:(NSCoder*) decoder

{

if(self=[super init])

{

self.name=[decoder decodeObjectForkey:@"name"]

}

return self;

}


KVC

-valyeForKey

setValue: forkey:

整体操作   [car valueForKeyPath:@"tires.pressure"]

运算   [car valueForKeyPath:@"pp.@count"];

批量处理  

NSArray *keys=[NSArray arraywityObjects:@"name",@"age",nil];

NSDictionary *d=[car dictionaryWithValueKeys:keys];


[car setValuesForKeysWithDictory:newvalues]设置新的值



NSPredicate

predicate=[NSPredicate predicateWithForcat:@"name=='lvshujun'"];

BOOL match=[predicate evaluateWithObject:car];

数组过滤

Arrays *cars;

Array *result;

result=[cars filteredArraysUsingPredicate :predicate];

格式说明符:predicate=[NSPreicate predicateFormat @"hehe.age?%d",50]

谓词模板  predicateTemplate=[NSPreicate predicateFormat:@"name=$NAME"];

NSDictionart *var=[NSDictionart dictionaryWithObjecsandKeys:@"Heribate",@"NAME",nil];

predicate=[predicateTemplate predicateWithSubstitutionVariables:var];

比较浮:AND BETWEEN IN等 

SELF

模板 

NSArray *names1=[NSArray arrayWithObjects:.......,nil];

NAArray *names2=.......;

predicate=[NSPredicate predicateWithFormat:@"SELF IN %@",names1];

NSArray *result=[names2 filteredArrayUsingPredicate:predicate];
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: