OC加强-day05
#program mark - 0_11 NSRange结构体介绍 [掌握]
是Foundation框架中的一个结构体
NSRange 定义的一个变量的两个属性
location:起始下标
length:匹配到的长度
"随堂代码/0_11 NSRange结构体介绍/1_NSRange本质上是一个结构体
1.NSRange本质是一个结构体
typedef struct{
NSUInteger location;
NSUInteger length;
}NSRange;
2.定义NSRange变量的4种方式
int main()
{
//方式1
NSRange xiaoyueRange;
xiaoyueRange.location = 2;
xiaoyueRange.length = 3;
//方式2
NSRange xiaoyueRange2 = {2,3};
//方式3
NSRange xiaoyueRange3 = {.location = 2,.length = 3};
//方式4 注意只要记住这一中就行了
NSRange xiaoyueRange4 = NSMakeRange(2,3);
return 0;
}
#program mark - 0_12 字符串的截取 [掌握]
int main(int argc, const char * argv[]) {
NSString *str = @"我1们2是3一4家5人6";
//从指定的下标开始一直截取到最后(包含这个下标对应的文字)
NSLog("%p",str);
NSString *str1 = [str substringFromIndex:3];
NSLog(@"%@",str1);
NSLog("%p",str1);
//截取前面指定个数的文字
NSString *str2 = [str substringToIndex:3];
NSLog(@"%@",str2);
//截取指定范围文字 从下标2开始,截取3个文字
NSString *str3 = [str substringWithRange:NSMakeRange(2, 3)];
NSLog(@"%@",str3);
return 0;
}
#program mark - 0_13 字符串的替换[掌握]
"练习
把字符串@"祝大家新年快乐啊!" 中的 @"啊!" 删掉
int main()
{
NSString *str = @"祝大家新年快乐啊!";
//string By Replacing Occurrences Of String: withString:
//字符串 被 替换 存在 字符串 用字符串
str = [str stringByReplacingOccurrencesOfString:@"啊!" withString:@""];
NSLog(@"%@",str);
return 0;
}
//当要替换的字符串不存在的时候,不会报错,但是原样输出
int main()
{
NSString *str = @"祝大家新年快乐啊!";
str = [str stringByReplacingOccurrencesOfString:@"小明" withString:@""];
NSLog(@"%@",str);
return 0;
}
#program mark - 0_14 字符串类型的转换[掌握]
"强调
使用场景:经常需要用户在文本框textField中输入数字的app,比如支付宝,计算器,银行客户代表
"模拟
如果用户输入了@"100"这个字符串,把它转换成100.00传递给一个函数,摸您转账100.00元.
//思路
//1.把@"100"字符串转换成浮点数100.00
void zhuanZhang(double money);
int main()
{
NSString *str = @"100";
double dou = [str doubleValue];
zhuanZhang(dou);
return 0;
}
//2.才把100.00传递给一个函数
void zhuanZhang(double money)
{
NSLog(@"转账了%lf",money);
}
#program mark - 0_15 字符串的其他常用方法[听懂]
取出字符串首部和尾部多余的空格
如果用户输入了@" 100 "这个字符串,把它转换成100.00传递给一个函数,摸您转账100.00元.
//思路
//1.把字符@" 100 "转换成 @"100"
int main()
{
NSString *str = @" 100 ";
str = [str stringByTrimmingCharactersInset:空格对象]
return 0;
}
//2.把@"100"进行其他操作
void zhuanZhang(double money)
{
NSLog(@"转账了%lf",money);
}
int main()
{
NSString *str = @" 100 ";
//string By Trimming CharactersInSet
// 裁剪 插入字符
//[NSCharacterSet whitespaceCharacterSet]
//创建一个空格对象
str = [str stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
NSLog(@"---%@---",str);
double dou = [str doubleValue];
zhuanZhang(dou);
return 0;
}
#program mark - 0_16 NSMutableString[掌握]
1.错误写法
//用一个自类的指针指向父类的对象,这是违背多态的规则的.
NSMutableString *Mstr = @"123";
2.分析
int main()
{
NSMutableString *Mstr = [NSMutableString string];
Mstr = @"123";//编译不报错只报警告的原因,因为OC是弱语言,任何指针指向任何对象,编译报警告的原因:子类指针指向父类对象
[Mstr appendFormat:@"345"];//编译没有警告的原因:编译检查 指针Mstr定义的时候是NSMutableString类型的,是拥有这个方法的
//运行错误的原因: 运行检查 Mstr指向的对象真实类型是NSString的对象,这个对象是不拥有这个方法的
}
2.NSMutableString和NSString相比优势是什么?
NSMutableString创建的对象是可变的,当需要反复修改一个字符串的时候,使用NSMutableString每次修改都在当前字符串上直接修改,不必新开辟空间创建对象
"练习
模拟:如果用户输入了@"100.1294"这个字符串,转换成100.12传给一个函数模拟转账.
void zhuuangZhang(double dou);
int main()
{
//思路
//1.@"100.1294" ---> @"100.12"
//1>把@"100.1294"这个不可变字符串转换成可变字符串
NSMutableString *Mstr = [NSMutableString stringWithString:@"100.1294"];
//2>想办法删除最后的9和4-->@"100.12"
[Mstr deleteCharactersInRange:NSMakeRange(6, 2)];
//2.把@"100.12"转换成100.12传给一个函数
double dou = [Mstr doubleValue];
zhuuangZhang(dou);
return 0;
}
void zhuuangZhang(double dou)
{
NSLog(@"%lf",dou);
}
#program mark - 0_17 创建NSArray数组的方式 [掌握]
"强调
1.OC数组里面存储的是OC的对象,这些对象可以使不同类型的.只要是对象就可以
"随堂代码/0_17 创建NSArray数组的方式/1_OC数组里面存放的是对象,这些对象可以是不同类型的.
int main(int argc, const char * argv[]) {
MKPerson *xiaoyue1 = [MKPerson new];
MKPerson *xiaoyue2 = [MKPerson new];
MKPerson *xiaoyue3 = [MKPerson new];
//方法创建
NSArray *arr = [NSArray arrayWithObjects:xiaoyue1,xiaoyue2,xiaoyue3, nil];
//快速创建
NSArray *arr2 = @[xiaoyue1,xiaoyue2,xiaoyue3];
NSLog(@"%@",arr);
NSLog(@"%@",arr2);
return 0;
}
2.nil的注意点
"随堂代码/0_17 创建NSArray数组的方式/2_不要在数组没结束之前添加nil
1>通过方法创建的数组,不要在数组没有结束之前添加nil,如果提前添加,会导致nil后面的对象无法添加到数组.
int main(int argc, const char * argv[]) {
MKPerson *xiaoyue1 = [MKPerson new];
MKPerson *xiaoyue2 = [MKPerson new];
MKPerson *xiaoyue3 = [MKPerson new];
//方法创建
NSArray *arr = [NSArray arrayWithObjects:xiaoyue1,xiaoyue2,nil,xiaoyue3,@"123", nil];
NSLog(@"%@",arr);
return 0;
}
2>通过快速创建方式,不能添加nil,加了马上报错
int main(int argc, const char * argv[]) {
MKPerson *xiaoyue1 = [MKPerson new];
MKPerson *xiaoyue2 = [MKPerson new];
MKPerson *xiaoyue3 = [MKPerson new];
//方法创建 下面代码立即报错
NSArray *arr = @[xiaoyue1,xiaoyue2,nil,xiaoyue3];
NSLog(@"%@",arr);
return 0;
}
#program mark - 0_18 取出存储在NSArray数组中的数据
1.由于NSArray是OC的类,那么它实例化的对象就可以用%@打印.
1>如果数组中元素包含中文字符串,用%@直接打印数组对象,打印的是中文的unicode编码
"随堂代码/0_18 取出存储在NSArray数组中的数据/1_%@打印整个数组
int main(int argc, const char * argv[]) {
MKPerson *xiaoyue1 = [MKPerson new];
MKPerson *xiaoyue2 = [MKPerson new];
MKPerson *xiaoyue3 = [MKPerson new];
NSArray *arr = [NSArray arrayWithObjects:xiaoyue1,xiaoyue2,xiaoyue3,@"123",@"我",nil];
NSLog(@"%@",arr);
return 0;
}
2>如果重写了自定义对象的description方法,如果方法返回的字符串包含中文,用%@打印整个数组,打印到整个自定义对象的时候,还会打印中文的unicode编码
2.如何获取OC数组中每一个元素
"随堂代码/0_18 取出存储在NSArray数组中的数据/2_下标法和对象方法
1>下标法
int main(int argc, const char * argv[]) {
MKPerson *xiaoyue1 = [MKPerson new];
MKPerson *xiaoyue2 = [MKPerson new];
MKPerson *xiaoyue3 = [MKPerson new];
NSArray *arr = [NSArray arrayWithObjects:xiaoyue1,xiaoyue2,xiaoyue3,@"123",@"我", nil];
//下标法
id xiaoyue4 = arr[0];
NSLog(@"%@",xiaoyue4);
NSLog(@"%@",arr[1]);
NSLog(@"%@",arr[2]);
NSLog(@"%@",arr[3]);
NSLog(@"%@",arr[4]);
//oc数组仍然存在越界的现象
NSLog(@"%@",arr[5]);//编译不报错,运行报错
return 0;
}
//注意,上面打印方法是可以吧中文打印出来的
2>对象方法
id 变量名 = [数组名 objectAtIndex:下标]
int main(int argc, const char * argv[]) {
MKPerson *xiaoyue1 = [MKPerson new];
MKPerson *xiaoyue2 = [MKPerson new];
MKPerson *xiaoyue3 = [MKPerson new];
NSArray *arr = [NSArray arrayWithObjects:xiaoyue1,xiaoyue2,xiaoyue3,@"123",@"我", nil];
id xiaoyue4 = [arr objectAtIndex:0];
MKPerson *xiaoyue5 = [arr objectAtIndex:1];
NSLog(@"%@",xiaoyue4);
NSLog(@"%@",xiaoyue5);
NSLog(@"%@",[arr objectAtIndex:2]);
NSLog(@"%@",[arr objectAtIndex:3]);
NSLog(@"%@",[arr objectAtIndex:4]);
//这种方式仍然存在越界
NSLog(@"%@",[arr objectAtIndex:5]);
return 0;
}
#program mark - 0_19 NSArray数组常用的其他的方法 [掌握]
"随堂代码/0_19 NSArray数组常用的其他的方法/NSArray数组常用的其他的方法
1.获取数组内部元素的个数
1>get方法来获取count的值
@property (readonly) NSUInteger count;
2>例子
int main(int argc, const char * argv[]) {
MKPerson *xiaoyue1 = [MKPerson new];
MKPerson *xiaoyue2 = [MKPerson new];
MKPerson *xiaoyue3 = [MKPerson new];
NSArray *arr = [NSArray arrayWithObjects:@"123",xiaoyue1,xiaoyue2,xiaoyue3,@"123", nil];
NSLog(@"%lu",[arr count]);
NSLog(@"%lu",arr.count);
return 0;
}
2.判断数组内部是否包含某一个对象
1>方法
- (BOOL)containsObject:(ObjectType)anObject;
BOOL result = [数组名 containsObject:要查找的对象];
2>
int main(int argc, const char * argv[]) {
MKPerson *xiaoyue1 = [MKPerson new];
MKPerson *xiaoyue2 = [MKPerson new];
MKPerson *xiaoyue3 = [MKPerson new];
NSArray *arr = [NSArray arrayWithObjects:@"123",xiaoyue1,xiaoyue2,xiaoyue3,@"124", nil];
BOOL result = [arr containsObject:@"123"];
switch (result) {
case 1:
NSLog(@"有!");
break;
default:
NSLog(@"没有!");
break;
}
return 0;
}
3.获取数组中第一个元素/最后一个元素
1>get方法
@property (nullable(有可能为空), nonatomic, readonly) ObjectType(id) firstObject;
2>例子
int main(int argc, const char * argv[]) {
MKPerson *xiaoyue1 = [MKPerson new];
MKPerson *xiaoyue2 = [MKPerson new];
MKPerson *xiaoyue3 = [MKPerson new];
NSArray *arr = [NSArray arrayWithObjects:@"123",xiaoyue1,xiaoyue2,xiaoyue3,@"124", nil];
//第一个元素
NSString *firObjct = [arr firstObject];
NSLog(@"%@",firObjct);
//最后一个元素
id lastObjct = [arr lastObject];
NSLog(@"%@",lastObjct);
return 0;
}
3>以后你获取一个数组的第一个元素/最后一个元素用下标法还是刚才讲的方法
用lastObjct/firstObject,因为当前数组有可能是空的
int main(int argc, const char * argv[]) {
NSArray *arr = [NSArray array];
// id obj = arr[0];
id obj = [arr firstObject];
NSLog(@"%@",obj);
return 0;
}
4.查找指定的数组元素第一次出现的下标
1>找到返回下标,找不到就返回 2^63-1
- (NSUInteger)indexOfObject:(ObjectType)anObject;
2>例子
int main(int argc, const char * argv[]) {
MKPerson *xiaoyue1 = [MKPerson new];
MKPerson *xiaoyue2 = [MKPerson new];
MKPerson *xiaoyue3 = [MKPerson new];
NSArray *arr = [NSArray arrayWithObjects:@"1234",xiaoyue1,xiaoyue2,xiaoyue3,@"1123", nil];
NSUInteger index = [arr indexOfObject:@"123"];
NSLog(@"%lu",index);
return 0;
}
#program mark - 0_20 NSArray数组的遍历 [重点掌握]
此知识点的复习见OC加强05视频笔记/0_20 NSArray数组的遍历.pdf
"随堂代码/0_20 NSArray数组的遍历/遍历
//方式1 最基本的for循环
int main()
{
MKPerson *xiaoyue1 = [MKPerson new];
MKPerson *xiaoyue2 = [MKPerson new];
MKPerson *xiaoyue3 = [MKPerson new];
NSArray *arr = [NSArray arrayWithObjects:@"123",xiaoyue1,xiaoyue2,xiaoyue3,@"123", nil];
int arr_count = (int)arr.count;
for (int i = 0; i < arr_count; i++) {
NSLog(@"%@",arr[i]);
NSLog(@"%@",[arr objectAtIndex:i]);
}
return 0;
}
//方式二 增强for循环
int main(int argc, const char * argv[]) {
MKPerson *xiaoyue1 = [MKPerson new];
MKPerson *xiaoyue2 = [MKPerson new];
MKPerson *xiaoyue3 = [MKPerson new];
NSArray *arr = [NSArray arrayWithObjects:@"123",xiaoyue1,xiaoyue2,xiaoyue3,@"123", nil];
for(id xiaoyueObj in arr)
{
NSLog(@"%@",xiaoyueObj);
}
return 0;
}
//方式三
int main(int argc, const char * argv[]) {
MKPerson *xiaoyue1 = [MKPerson new];
MKPerson *xiaoyue2 = [MKPerson new];
MKPerson *xiaoyue3 = [MKPerson new];
NSArray *arr = [NSArray arrayWithObjects:@"123",xiaoyue1,xiaoyue2,xiaoyue3,@"123", nil];
//方式三
[arr enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSLog(@"%@",obj);
if(idx == 2)
{
*stop = YES;
}
}];
return 0;
}
#program mark - 0_21 数组与字符串相关的两个方法 [听懂]
此知识点的复习见OC加强05视频笔记/0_21 数组与字符串相关的两个方法.pdf
#program mark - 0_22 NSMutableArray数组的新增 [掌握]
此知识点的复习见OC加强05视频笔记/0_22 NSMutableArray数组的新增.pdf
"强调
1.NSMutableArray是NSArray的子类,NSArray所有的功能NSMutableArray都是具有的,NSMutableArra有自己拓展的属性和方法
2.NSArray是一个不可变数组,NSArray对象内部存储的对象不能增加/删除/修改.但是NSMutableArray却可以
"随堂代码/0_22 NSMutableArray数组的新增/增删改
int main(int argc, const char * argv[]) {
MKPerson *xiaoyue1 = [MKPerson new];
MKPerson *xiaoyue2 = [MKPerson new];
MKPerson *xiaoyue3 = [MKPerson new];
NSArray *arr = [NSArray arrayWithObjects:@"123",xiaoyue1,xiaoyue2,xiaoyue3,@"123", nil];
NSMutableArray *Marr =[NSMutableArray arrayWithObjects:@"123",xiaoyue1,xiaoyue2,xiaoyue3,@"123", nil];
//改
// arr[0] = @"124";
// Marr[0] =@"124";
//增加
// [Marr addObject:@"456"];
[arr ad]//根本没有这个方法
return 0;
}
3.无论是可变数组还是不可变数组里面都可以存放数组
"随堂代码/0_22 NSMutableArray数组的新增/2_里面的元素都可以是数组
int main(int argc, const char * argv[]) {
MKPerson *xiaoyue1 = [MKPerson new];
MKPerson *xiaoyue2 = [MKPerson new];
MKPerson *xiaoyue3 = [MKPerson new];
NSArray *testArr = @[xiaoyue1,xiaoyue2,xiaoyue3];
NSArray *arr = [NSArray arrayWithObjects:@"123",testArr, nil];
NSMutableArray *Marr = [NSMutableArray arrayWithObjects:@"234",testArr ,nil];
return 0;
}
#program mark - 0_23 NSMutableArray元素的删除 [掌握]
- (void)removeValueAtIndex:(NSUInteger)index fromPropertyWithKey:(NSString *)key;
#program mark - 02 数组的持久化 [听懂]
也就是写入到文件
"强调
1.数组转换成字符串 ---> joined
2.字符串拆分成数组 ---> separated
"随堂代码/02 数组的持久化/数组和字符串
int main(int argc, const char * argv[]) {
MKPerson * xiaoyue1 = [MKPerson new];
MKPerson * xiaoyue2 = [MKPerson new];
MKPerson * xiaoyue3 = [MKPerson new];
NSMutableArray *Marr = [NSMutableArray arrayWithObjects:xiaoyue1,xiaoyue2,xiaoyue3,@"123", nil];
//数组-->字符串
NSString *strFromMarr = [Marr componentsJoinedByString:@"^_^"];
NSLog(@"\n%@",strFromMarr);
//字符串-->数组
NSArray *arrFromStr = [strFromMarr componentsSeparatedByString:@"^"];
NSLog(@"\n%@",arrFromStr);
return 0;
}
#program mark - 03 键值对存储数据的形式 [掌握]
1.用数组存储对象的缺点
1>NSArray/NSMutableArray存取依赖于下标的.
2>当数组内元素变动后,原来某个元素你是知道下标的,此时下标就不确定了.
"随堂代码/03 键值对存储数据的形式/1_数组存储对象的缺点
int main(int argc, const char * argv[]) {
NSMutableArray *arr = [NSMutableArray arrayWithObjects:@"我",@"爱",@"你",@"们",nil];
NSLog(@"%@",arr[2]);
//代码块开始
[arr removeObjectAtIndex:1];
//代码块结束
NSLog(@"%@",arr[2]);
return 0;
}
2.如何解决这个问题
1>数组中存储元素的时候,给每一个元素起一个别名,在使用这个元素的时候直接通过别名来获取这个元素,不通过下标
2>元素--->Value 别名--->Key
3>这种存储方式叫键值对
4>多个键值对叫字典
5>oc中字典有一个类叫做NSDictionary/NSMutableDictionary
#program mark - 04 创建NSDictionary字典数组 [掌握]
"练习
小明身高1.5m,年龄10,体重90KG,用两种方式创建字典对象存储数据
"随堂代码/04 创建NSDictionary字典数组/1_创建NSDictionary字典数组
int main(int argc, const char * argv[])
{
NSDictionary *xiaomingDict1 = [NSDictionary dictionaryWithObjectsAndKeys:@"1.5m",@"height",@"90KG",@"weight",@"10",@"age", nil];
NSLog(@"%@",xiaomingDict1);
NSDictionary *xiaomingDict2 = @{@"height":@"1.5m",@"weight":@"90KG",@"age":@"10"};
NSLog(@"%@",xiaomingDict2);
return 0;
}
#program mark - 05 取出字典数组中的数据 [掌握]
"练习
给你一个小明身高体重年龄的字典,用两种方式分别获取三个属性
int main(int argc, const char * argv[]) {
NSDictionary *xiaomingDict = @{@"height":@"1.5",@"weight":@"80KG",@"age":@"10"};
NSLog(@"%@------%@",xiaomingDict[@"height"],[xiaomingDict objectForKey:@"height"]);
NSLog(@"%@------%@",xiaomingDict[@"weight"],[xiaomingDict objectForKey:@"weight"]);
NSLog(@"%@------%@",xiaomingDict[@"age"],[xiaomingDict objectForKey:@"age"]);
return 0;
}
#program mark - 06 NSDictionary字典数组的遍历 [重点掌握]
1.如何获取字典中键值对的个数
1>属性
@property (readonly) NSUInteger count;
2>例子
"随堂代码/06 NSDictionary字典数组的遍历/1_获取字典内键值对个数
int main(int argc, const char * argv[]) {
NSDictionary *xiaomingDict = @{@"height":@"1.5",@"weight":@"80KG",@"age":@"10"};
NSUInteger count = [xiaomingDict count];
NSUInteger count2 = xiaomingDict.count;
NSLog(@"%lu---%lu",count,count2);
return 0;
}
2.不同的键值对对应key不能相同,一旦相同会出现某一个无法存储进字典
"随堂代码/06 NSDictionary字典数组的遍历/2_不同的键值对的的key绝对不能相同
int main(int argc, const char * argv[]) {
NSDictionary *xiaomingDict = @{
@"height":@"1.5",
@"age":@"80KG",
@"age":@"10"
};
NSLog(@"%@",xiaomingDict);//打印发现有一个age对应的键值对没有存储进字典
return 0;
}
"随堂代码/06 NSDictionary字典数组的遍历/3_遍历
3.遍历
1>不能用普通for循环遍历
int main(int argc, const char * argv[]) {
NSDictionary *xiaomingDict = @{
@"height":@"1.5",
@"weight":@"80KG",
@"age":@"10"
};
//方式1 普通for循环
for (int i = 0; i < xiaomingDict.count; i++ ) {
NSLog(@"%@",xiaomingDict[i]);//报错
}
return 0;
}
2>增强for
int main(int argc, const char * argv[]) {
NSDictionary *xiaomingDict = @{
@"height":@"1.5",
@"weight":@"80KG",
@"age":@"10"
};
//增强for
for (id xiaoyueKey in xiaomingDict) {//这里拿到的是key如果要打印值需要在内部获取值
// NSLog(@"%@",xiaoyueKey);
// NSLog(@"%@",xiaomingDict[xiaoyueKey]);
NSLog(@"%@--%@",xiaoyueKey,[xiaomingDict objectForKey:xiaoyueKey]);
}
return 0;
}
3.block
int main(int argc, const char * argv[]) {
NSDictionary *xiaomingDict = @{
@"height":@"1.5",
@"weight":@"80KG",
@"age":@"10"
};
[xiaomingDict enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) {
// NSLog(@"%@",[xiaomingDict objectForKey:key]);//通过key自己打印
NSLog(@"%@----%@",key,obj);//直接使用NSDictionary.m调用block时传给我们的key/Value打印
if([key isEqualToString:@"weight"])//希望遍历到key是weight的键值对的时候停止遍历,基本没用
{
*stop = YES;
}
}];
return 0;
}
OC加强-day05的更多相关文章
- OC基础-day05
#pragma mark - Day05_01_NSObject类 NSObject类 1). NSObject是Foundation框架中的1个类. 在这个类中有1个类方法,叫做new 这个方法的作 ...
- iOS代码规范(OC和Swift)
下面说下iOS的代码规范问题,如果大家觉得还不错,可以直接用到项目中,有不同意见 可以在下面讨论下. 相信很多人工作中最烦的就是代码不规范,命名不规范,曾经见过一个VC里有3个按钮被命名为button ...
- 用C语言封装OC对象(耐心阅读,非常重要)
用C语言封装OC对象(耐心阅读,非常重要) 本文的主要内容来自这里 前言 做iOS开发的朋友,对OC肯定非常了解,那么大家有没有想过OC中NSInteger,NSObject,NSString这些对象 ...
- 嵌入式&iOS:回调函数(C)与block(OC)传 参/函数 对比
C的回调函数: callBack.h 1).声明一个doSomeThingCount函数,参数为一个(无返回值,1个int参数的)函数. void DSTCount(void(*CallBack)(i ...
- 嵌入式&iOS:回调函数(C)与block(OC)回调对比
学了OC的block,再写C的回调函数有点别扭,对比下区别,回忆记录下. C的回调函数: callBack.h 1).定义一个回调函数的参数数量.类型. typedef void (*CallBack ...
- WebViewJavascriptBridge源码探究--看OC和JS交互过程
今天把实现OC代码和JS代码交互的第三方库WebViewJavascriptBridge源码看了下,oc调用js方法我们是知道的,系统提供了stringByEvaluatingJavaScriptFr ...
- OC泛型
OC泛型 泛型是程序设计语言的一种特性,他主要是为了限制类型的,比如OC中的数组,你可以限制他里面装的是NSString类型,泛型的话JAVA和C++都有的,大家要是对泛型不了解的话可以去百度一下. ...
- iOS学习15之OC集合
1.数组类 1> 回顾C语言数组 数组是一个有序的集合, 来存储相同数据类型的元素. 通过下标访问数组中的元素,下标从 0 开始. 2> 数组 数组是一个有序的集合,OC中的数组只能存储对 ...
- JS 与OC 交互篇
完美记录交互 CSDN博客: (OC调用JS) http://blog.csdn.net/lwjok2007/article/details/47058101 (JS调用OC) http://blog ...
随机推荐
- 关于NSLocalizedString(@"Foo %@",nil)
NSLocalizedString(@"Foo %@",nil) 这句话实际上是在多语言文件中寻找一个key为“Foo %@”的文字,千万不要把这个和[NSString strin ...
- POJ-3070Fibonacci(矩阵快速幂求Fibonacci数列) uva 10689 Yet another Number Sequence【矩阵快速幂】
典型的两道矩阵快速幂求斐波那契数列 POJ 那是 默认a=0,b=1 UVA 一般情况是 斐波那契f(n)=(n-1)次幂情况下的(ans.m[0][0] * b + ans.m[0][1] * a) ...
- HOG特征
HOG(Histogram of gradient)统计图像局部区域的梯度方向信息来作为该局部图像区域的表征.HOG特征具有以下几个特点: (1)不具有旋转不变性(较大的方向变化),实际应用中不变性是 ...
- Already tried 0 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep解决方法
14/03/26 23:10:04 INFO ipc.Client: Retrying connect to server: 0.0.0.0/0.0.0.0:10020. Already tried ...
- 页面置换算法(最佳置换算法、FIFO置换算法、LRU置换算法、LFU置换算法)
页面置换产生的原因是:分页请求式存储管理(它是实现虚拟存储管理的方法之一,其中一个特性是多次性-->多次将页面换入或换出内存) 效果最好的页面置换算法:最佳置换算法 比较常用的页面置换算法有:F ...
- ssh-copy-id password
- HDU 3392 Pie(DP)
题意:有一些男生女生,男生女生数量差不超过100 ,男生女生两两配对.要求求出一种配对方法,使每一对的高度差的和最小. 思路:(我是真的笨笨笨!!)设人少的一组人数为n,b[],人多的一组人数为m,g ...
- Jquery实现图片轮播源码
<html><head><style type="text/css">#banner {position:relative; width:478 ...
- Delphi- 数据加密和解密
Delphi进行数据加密,在数据库方面经常要使用到.从网上转载过来的,以后会经常会用到. 一.MD5加密算法 在C#/.Net里提供了MD5加密的类库.在Delphi中没有.只能自己建一个新的单位,将 ...
- iOS 使用fir、 蒲公英 进行内部测试
fir 蒲公英需要去注册账号并认证,按提示即可完成. 测了公司账号.个人开发账号,2个都可以用,就是要在配置文件里加上测试者的udid. 步骤: 1.添加测试机的udid edit配置文件,添加刚刚加 ...