今天又到练习日 感觉最近这几天学的东西挺多的 我们一起再来复习一下;
- 需要重点掌握的知识点
- 变量:
变量的声明和赋值 类型 变量名称 = 值;
- 基本数据类型:
int float double long longlong char short BOOL
- 运算符:
+ - * / % ++ — += -= *= /= %=
- 比较运算符:
> < = != >= <= ==
- 逻辑判断:
if else if else switch 三目表达式
- 循环:
for while do while break continue return
- 方法:
方法声明 对象方法 -(返回值类型)方法名称With参数介绍:(参数类型)参数名称 and参数介绍:(参数类型)参数名称{ return ;}
- 面向对象:
类方法:+开头 通过类名调用 不能使用self 调用简单工厂方法:类方法的一种 用来创建对象的 方法名称以类名开头[NSArray arrayWith……];封装继承多态
UILabel UIButton UITextFiled UIImageView
内存管理
ARC
:自动内存管理
MRC
:手动内存管理内存计数机制:内存计数表示当前对象被引用的次数,如果引用次数为0 则对象会从内存中释放掉retain会对内存计数+1release会对内存计数-1retain(strong)assign(weak)copy对set方法的影响:retain:两件事1.把原来的释放 2把新的retain+1assign:直接赋值copy:调用copy并赋值dealloc方法 当对象内存计数为0时会释放内存 释放之前会调用此方法 在arc中用来验证对象没有有释放掉
- 如果是retain strong set方法做了下面这些事 两件事 1.把原来的释放 2.把新的+1这个只能用于对象
- 如果是
assign weak set方法做了1件事 直接赋值这个用于非对象
- 如果是copy set
方法做了1件事 直接调用copy
- 以后在写属性对象方法的格式@property(
nonatomic,strong) NSMutableArray *myArray;
- 非对象方法的格式@property
(nonatomic,weak)int x;
常见错误
1.[ setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key resultLabel.出错原因:sb控件和代码关联出错解决方案:找到相对应的页面的黄色圆点(ViewController)在此上面右键 删除 黄色叹号2.<__NSArrayM: 0x7c0320b0> was mutated while being enumerated.出错原因:forin循环时修改了数组 但继续循环了解决方案: 修改数组后 加break或return3.-[__NSArrayM objectAtIndex:]: index 3 beyond bounds [0 .. 0]'出错原因:数组角标越界解决方案:角标的取值 要小于数组的count4.-[ViewController addZombX]: unrecognized selector sent to instance 0x79174e00'出错原因:在ViewController中找不到方法
解决方案:在某个类中没有实现这个方法 或者是对象类型错了
字符串
在编程
过程中很多时候需要拼接字符串。在使用FMDB管理sqlite数据库,手写的SQL语句总是要拼接字符串。
各种语言有不同的字符串拼接方式,java
、c++等语言字符串拼接最为简单,直接使用“+”就搞定了。例如"select * from " + tablename + “where id=” + id 但是使用OC恶心的语法写出的代码也非常恶心。下面总结下
方法一、使用 stringWithFormat 格式化字符串
NSString*sql = [NSString stringWithFormat:"select * from %@ where id='%@'",tablename,id];
方法二、使用stringByAppendingString
NSString*sql = [[[[@"select * from " stringByAppendingString:tablename] stringByAppendingString:@"where id='"]stringByAppendingString:id]stringByAppendingString:@"'"];
或者
NSString*sql
= [@"select * from " stringByAppendingString:tablename]; sql = [sql stringByAppendingString:@"where id='"]; sql = [sql stringByAppendingString:id]; sql = [sql stringByAppendingString:@"'"];
方法三、使用stringByAppendingFormat 这个是把方法一和方法二结合结合起来的一个方法。
一直想找个好的方法,既直观又方便。
甚至还想到用宏。
#define _SQL(x) #x #define SQL(x) _SQL(x)
可惜所有的表名、字段名都要定义为宏,且NULL值不好处理。 最后想到使用不定长参数来拼接字符串,将上面的方法封装起来。
方法四、+ (NSString)NStr:(NSString) str,…
// 拼接字符串 + (NSString*)NStr:(NSString*) str,... { if (!str) { return nil; } NSMutableString *ret = [NSMutableString stringWithFormat:@"%@",str]; id obj = nil; va_list args; va_start(args, str); while ((obj = va_arg(args, id))) { if ([obj isKindOfClass:[NSString class]]) { [ret appendString:obj]; } else { NSLog(@":WARNING %@ is not a NSString", [obj class]); } } va_end(args); return ret; } // 使用 [类名 NStr:@"select * from ",tableName,@" where id='",id,@"'",nil];
虽然可以拼接字符串了,但是看着还是不怎么直观。
学习ios 重要还是要理清楚思路 在做或者看老师代码的时候 自己多想想为什么 不要自己看着就抄 另外还是要推荐一下 蓝懿IOS这个培训机构 和刘国斌老师刘国斌老师还是很有名气的,听朋友说刘老师成立了蓝懿iOS,,老师讲课方式很独特,能够尽量让每个人都能弄明白,有的比较难懂的地方,如果有的地方还是不懂得话,老师会换个其它方法再讲解,这对于我们这些学习iOS的同学是非常好的,多种方式的讲解会理解得更全面,这个必须得给个赞,嘻嘻,还有就是这里的学习环境很好,很安静,可以很安心的学习,安静的环境是学习的基础,小班讲课,每个班20几个学生,学习氛围非常好,每天都学到9点多才离开教室,练习的时间很充裕,而且如果在练习的过程中有什么困难,随时可以向老师求助,不像其它机构,通过视频教学,有的甚至学完之后都看不到讲师本人,问点问题都不方便,这就是蓝懿与其它机构的区别,相信在刘国斌老师的细心指导下,每个蓝懿学员都能找到满意的工作,加油!
写博客的第二十一天,
QQ 565803433;