1.成员变量整xing在初始化时候系统会默认置为0.而在局部变量设置初始化时,一定要赋值置0,因为会有意外发生不是默认为0,下面再用到会出错;
L1:{
int count = 0; //切莫图方便写为 int count;
}
2.在viewDidLoad中拿到label的frame有可能是不准确的,此时正在对view做一个 渲染的操作,view还未完全绘制出来,所以此时拿到的frame不一定是正确的。所以如果要拿frame做好在viewWillAppear或者viewDidAppear里面。还需要注意的是在viewWillAppear方法内部不要坐太多其他的多余操作,因为每次界面退出后再进来,都会执行这些代码操作,会耗费性能。
3.如果在获取一个view的动态size的时候,有两个方法,一个是CGRectGetMaxX(label),获取控件label在被填充之后的最大X坐标,但是这个在配合autolayout使用中发现,不能得到填充之后的最新值,而是在xib中直接拖进去的那个x,另外还有一个方法特别好,仅在配合autolayout使用填充后,得到是真实的填充后的值,
4.在开发过程中请求入参以json呈现Xcode控制台或者用charies抓包工具拦截,有不能模拟器型号出现异常问题,不可预料的错误都可查看request/response,例这次6PLUS版本号为7.0请求出现的返回参数异常(另外模拟器重启不能reset账号)。
5.if([returnDetailUrllength] >0)记得这样写是最保险的,既可以拦截空值,也可以拦截为空字符串,因为如果写成if(returnDetailUrl)来判断,returnDetailUrl有可能返回是空字符串,空字符串也是有值的,这样本来空字符串完全是没用的东西,也进去了{}变成操作了·~·
6.在使用动态改变控件内部label和image大小的时候,要这样做
记得在苹果官网查阅文档中,会在新开发版本之后又新的API简介,要记得经常查看。
7.
#define RGBA(r,g,b,a)[UIColor colorWithRed:(float)r/255.0f green:(float)g/255.0f blue:(float)b/255.0f alpha:a]
和#define RGBA(r,g,b,a) [UIColor colorWithRed:(float)r green:(float)g blue:(float)b alpha:a]
上面两种写法结果会有很大的区别
8.???
static NSString *const TCTSiftDefaultTabCellIdentifier =@"TCTSiftDefaultTabCell";=
9.
9.内联函数inline
定义:
有函数的结构,但不具备函数的性质,类似于宏替换。代码中使用inline定义,能否形成内联函数,还要看编译器对内联函数体内部的定义的具体处理。
产生的动机:
消除函数调用产生的开销,适合与小内存函数,频繁执行的函数。
注意事项:
不能使用循环语句;不能使用开关语句;不能使用递归调用;定义在第一次调用之前;
结合使用的问题:
static inline fun_returnType Fun_name(param...){}
static 标识此内联联函数只能在本文件中使用,限制了内联函数的作用域。相对于宏来说,static inline具有和宏同样级别的开销,而且还提供了类型安全,没有长度和格式的具体限制
9
10.NSNotfound是枚举值
if(range.location!=NSNotFound) range的location没有值 ,既为空的情况 枚举判断)
11. 同样 存储key,value,为什么在网络请求中一个可行一个不可行呢
parameters[@"code"] = code;
// [parameters setObject:@"code" forKey:@"code"];
12.
account.expires_time = [now dateByAddingTimeInterval:<#(NSTimeInterval)#>];
account.expires_time = [nowdateByAddingTimeInterval: account.expires_in.doubleValue];
NSTimeInterval看着这么拽的类型,其实就是要个double类型的值,强制转化一下就行了
13.#define kTCTCacheGet(value) [[TCTCacheManager defaultManager] objectForKey:value]