[obj-c]基础的东西

记录学习obj-c的一些基础的东西

====================================

import ”xx"与import <> 区别

<>表示程序将会首先且只会去你的系统类库目录查找你所想引入的类或者包; 
""表示程序会首先从你的当前目录查找你所想引入的类或者包,如果没有找到,将去系统类库目录找.

obj-c方法前的符号含义。

减号 –

实例方法

     代表此方法是实例方法,必须先生成类实例,通过实例才能调用该方法。

加号 + 

类方法

    代表此方法是类的静态方法,可以直接调用,而不用生成类实例。

====================================

KVC 

概述 KVC是KeyValue Coding的简称,它是一种可以直接通过字符串的名字(key)来访问类属性的机制。而不是通过调用Setter、Getter方法访问。 

-valueForKey:

-setValue: forKey:

path

-valueForKeyPath:

-setValue: forKeyPath:

{把xx设置到马力: 车下的引擎属性,引擎属性下的马力

 [car setValue:@"xxxxx" forKeyPath:@"engine.power"]

}

整体操作(数组类)

KVC有一个很棒的一点是,如果NSArray 请求一个键值,它实际上会查询数组中的每一对象来查找这个键值。

ex:

tires<-数组

NSArray *pressures = [car valueForKeyPath: @"tires.xxxx"]

此时会把所有tires数组内的对象的xxxx属性都查询出来以NSArray的形式。

流畅的计算(通过使用path与@来实现快速计算)

在valueForPath下使用path与@来实现快速计算 cars是个数组

ex:计算一共用多少车

count = [xx valueForPath:@"cars.@count"]

@sum 

@min

@max

@avg

等目前我还不知道其他=-=

ex2:车队中形式公里最长的公里数 cars是个NSArray max会存放车队 cars中行驶公里最长的公里数

max= [xx valurForPath:@"[email protected]"]

!注意:编译器无法判断他是不是错误键路径。\

@distinctUnionOfObjects 在左边的属性数组对应右边属性中去重取出,以NSArray形式

[xx valueForKeyPath:@"[email protected]"]

去重取出make

distinct表示去重 union表示集合

处理setValue:forKey:  value为nil的问题

重写-(void) setNillValueForKey: (NSString *)key 

{

if(key isEqualToString: @"xxxx"){

XXXX=一个值为nil时此属性应该的值

}else{

[super setNilValueForKey:key];

}

}

处理未定义的键

添加一个NSMutableDictionary字典来保存未定义的键

重写

-(void) setValue:(id) value forUndefinedKey:(NSString *)key{

if(stuff==nil){

stuff=[[NSMutableDictionary alloc] init]

}

[stuff setValue:value for:key]

}

重写

-(id) valueForUndefinedKey:(NSString *)key{

id value = [stuff valueForkey:key];

return(value)

}

<null>,(null),nil

<null>

表示[NSNull null]

(null)

是一个真实的nil

nil

obj-c中的空值

NSDictionary  setValue:forkey:如果设置nil的话 会把对应的键从字典中删除。

NSPredicate

类似过滤器

[NSPredicate predicateWithFormat: @"name=='herbie'"]

返回一个 NSPredicate  类型对象 此对象表明 过滤:只保留name属性等于herbie。

name属性那个位置可以放置keyPath 如对car使用过滤器时 engine.horsepower>xxx

predicateWithFormat后跟一个@"keypath 运算符 value"

且@" (第一个过滤条件) AND (第二个过滤条件)"

AND 还可以为 OR, NOT, &&, ||, !,可以不分大小 不过还是大写好点

不等号不仅适用于数值 也适用于字符。比如<N 则过滤剩下A~M的。

数组运算符

引擎马力在50到200之间的。

BETWEEN 

@“engine.horsepower BETWEEN {50,200}”

IN

@“name IN{'abc','poolo'}”

字符串运算符

BEGINSWITH 以什么为开头

ENDSWITCH 以什么为结尾

CONTAINS 是否包含

LIKE运算符

name LIKE ‘*er*’  //包含er的 *表示前后任意

name LIKE '???er*'//er前面只能有3位后面任意

LIKE[cd] 用于忽略大小写

MATCHES 万恶的正则表达式

====================

一个_

_XX 表示是全局变量

两个_

__XX 表示是局域变量

====================

当属性为对象指针时 必须要使用(weak/strong) 修饰

strong 表示 长期持有  

keep tihs in the head until i don't point to it anymore

weak  表示 如果没有使用 则释放 

keep this as long as someone else points to it strongly

====================

self super in .h .m

.h

self     means my plementation

super  means my superclass's implements

.m

self     means tihs class's class methods

super  this class 's superclass's class methods

故 self与super只能调用class method [方法前面带+号的]

====================

参数不确定的时候用,号

如stringWithFormat @"%@",x

====================

id

oc 中 id可以接受任何对象,并且 id可以执行import到此类的方法。

id c=[[NSString alloc] init]

//此时c可以执行NSString的方法。

isKingOfClass: 是否是这种类别的[包含继承自这个类] 既所有类都是isKindOfClass:NSobject  的class 

isMemberOfClass: 是否是这种类的[只考虑自己 不考虑继承]既父类是不是不考虑

[obj isKindOfClass:[NSString class]]

respondsToSelector: 回复这个对象是否有这种方法。(方法选择器见下一模块)

[obj respondsToSelectore:@selector(shoot)]

====================

SEL

方法选择器[stanford课程第第三课]

SEL XXX=@selector(shoot)

[obj performSelector:obj的xx方法] //obj执行xx方法

//button 是UIButton对象

[button addTarget:self action:@selector(xx方法)]//绑定这个Button的执行目标为self,并将这个button按钮action绑定到xx方法。

猜你喜欢

转载自poolo.iteye.com/blog/1680286