记录学习obj-c的一些基础的东西
====================================
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:@"cars.@max.gongli"]
!注意:编译器无法判断他是不是错误键路径。\
@distinctUnionOfObjects 在左边的属性数组对应右边属性中去重取出,以NSArray形式
[xx valueForKeyPath:@"cars.@distinctUnionOfObjects.make"]
去重取出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 万恶的正则表达式
<style> /* 作用描述:给INPUT添加美化的样式,兼容IE8,IE9,FF,chrome,safari等 效果描述; - 1.边框带圆角 - 2.指定INPUT高度 - 3.INPUT文本上下居中,添加左边距 - 4.背景色为白色 - 5.当INPUT获得光标的时候,边框高亮显示天蓝色。 - 6.IE7下没有高亮效果 - 7.chrome下聚焦后边框是2px。 */ .cssInput{ border:1px solid #7A6F6F; border:1px solid #7A6F6F \9;/*IE*/ width:200px; height:20px;/*非IE高度*/ height:20px \9;/*IE高度*/ padding-left:5px; /*all*/ line-height:20px \9;/*IE*/ -moz-border-radius:3px;/*Firefox*/ -webkit-border-radius:3px;/*Safari和Chrome*/ border-radius:3px;/*IE9+*/ background-color:white; outline:none; } .cssInput:focus{/*IE8+*/ border-color:#78BAED; [;outline:1px solid #78BAED;/*chrome*/ }</style> <input type="text" id="txt_id" value="我是cssInput的text"><br/><br/> <input type="text" id="txt_id" value="我是普通的text">
附件是效果图
愤怒的coder - 分享、共赢
src : http://marshal.easymorse.com/archives/3703