记录学习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:@"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 万恶的正则表达式
====================
一个_
_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方法。
分享到:
相关推荐
换句话说,我们打算使用C ++编写所有逻辑代码,业务规则和可以共享的东西,因此我们可以将相同的代码编译到每个平台。 在该图中,您可以在最低级别看到C ++层。 所有共享代码都在此段中。 最高级别是常规的Obj-C /...
----------------------------------- Android 编程基础 1 封面----------------------------------- Android 编程基础 2 开放手机联盟 --Open --Open --Open --Open Handset Handset Handset Handset Alliance ...
9. 属性与字段:在C#中,属性提供了一种访问字段的封装方式,`obj.sData`是合法的属性访问,而`obj.set(obj.sData)`是错误的,应为`obj.sData = "It is funny!";` 10. 自增操作符:`a++`会在操作后自增,因此`!(a++...
Android jni基础知识, # This is a test examlpe foe android jni 1、实现一个android工程,在其Android.mk文件中不要定义jni相关的东西,代码中可以尽情的使用 2、使用mmm 命令编译该工程,能够编译成功的。...
但是只要我们掌握了一定的C语言知识,有些东西还是容易做出来的。 二、C51热启动代码的编制 在工业控制计算机,往往设有有看门狗电路,当看门狗动作,使计算机复位,这就是热启动。热启动时,一般不允许从头开始,...
它们是由美国Borland公司开发的,对于学习基础的C语言编程和早期的C++编程有着重要的作用。 TurboC 2.0是Borland在1980年代末期发布的一个版本,它以其高效、轻便和易用性而闻名。这个版本提供了集成的编译器、链接...
W3C组织正在研究一种名为RDF(Resource Description Framework)的metadata处理方法,可以自动交换信息,W3C宣称,使用RDF配合数字签名,将使网络中存在"真实可信"的电子商务。 六.显示 单独用XMl不能显示页面,...
Bearded Ax是用干净的纯C ++语言编写的简单的通用OpenGL渲染器。 该斧头将成为例如视频游戏引擎的可维修基础。 预期功能: 适用于大多数驱动程序的干净,模块化,面向对象的设计 支持OFF,OBJ和COLLADA网格 支持...
MTK 的编译过程主要是在 windows 命令行下通过 Makefile 文件执行相应的 prel 脚本或 c 程序,将资源包生成 c 源程序,并与相应模块的 c 程序.o,.lib 或.obj 的中间代码,最终生成在手机上使用的 .bin 文件和在...
在这篇文档中,将以C/C++的源码作为我们基础,所以必然涉及一些关于C/C++的编译的知识,相关于这方面的内容,还请各位查看相关的编译器的文档。这里所默认的编译器是UNIX下的GCC和CC。 关于程序的编译和链接 ...
2. **状态转换**:交通灯有多个状态(如南北向绿灯、东西向绿灯、全红灯等),单片机需要能根据当前状态和预设的转换规则切换到下一个状态。 3. **输入检测**:在某些情况下,交通灯可能需要根据实际交通情况调整,...
在这篇文档中,将以C/C++的源码作为我们基础,所以必然涉及一些关于C/C++的编译的知识,相关于这方面的内容,还请各位查看相关的编译器的文档。这里所默认的编译器是UNIX下的GCC和CC。 二、关于程序的编译和链接 ...
1. **环境搭建**:首先,需要安装Keil uVision IDE,这是常用的STM32开发工具,支持C/C++编程和项目管理。文件"keilkilll.bat"可能是用于清理Keil工程的批处理文件,以确保开发环境的清洁。 2. **固件库准备**:STM...
第二部分 C#程序设计基础.28 第四章 数 据 类 型 .28 4.1 值 类 型 .28 4.2 引 用 类 型 .33 4.3 装箱和拆箱 .39 4.4 小 结 .42 第五章 变量和常量 .44 5.1 变 量 .44 5.2 常 量 .46 5.3 小 结 .47 ...
C0l:台风波形文件 CAB:Microsoft压缩档案文件 CAD:Softdek的Drafix CAD文件 CAM:Casio照相机格式 CAP:压缩音乐文件格式 CAS:逗号分开的ASCⅡ文件 CCB:Visual Basic动态按钮配置文件 CCH:Corel图表...