1.iOS宏定义的时候,起头最好用项目的前缀. 类如:YKscreenWidth//自定义的myViewcontroller,左上角的回退按钮.用的地方多,最好在全局宏定义一下....其他类似,如果有用到比较多的地方,最好在全局来个声明
2.SVN用法: checkout 将整个项目源码下载到本地(下载所以代码,只需要做一次) update(下载最新,只更新改变的代码) 把本地的代码更新至服务器上的最新版本 commit(上传提交,只提交更新的代码) 将本地代码的更新内容上传到服务器 每天下班----commit可运行版本
3.
安装Cocoapods,在终端输入命令
$sudo gem install cocoapods
这个时候会提示你输入密码,注:在终端输入密码不会有提示,光标也不会移动,一定要注意
4. view 的 hidden属性为yes:只是不渲染,但是他还在,没有销毁,还能取到的。
5.init 比 awakeWihtNIb 先加载。awakeWithNib 只是把xib内部的控件唤醒,但是不会设置frame(在awakeWithNib时候内部的控件的frame是不准确的),在运行layoutSubwiews 才会正确的设置控件的frame。
6.tableview的numofSection执行的次数跟随IOS的版本就行变化,有时调用1次,有时调用2次。
7.一个控制器里面可以创建2个tableview,只要给他们设置代理,他们就会分别调用numOfScetion 和cellForAtIndexpath等代理方法。如果有2个tableview,那么就会分别各调用一次numOfScetion等方法,所以你只需要给tableview加tag值,然后在numOfScetion等方法里面判断这次进来的是哪个tableview就行了。
现在我的控制器里面有两个tableview,那么下面这个函数里面的tableview(参数)到底指的是那个tableview(我自己创建的)呢?--------解决办法:用tag值区分----我创建的两个tableview分别会调用下面的方法
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return 1;
}
8.全局变量和静态全局变量(static变量)的区别:(1)加了static的变量只可以在本类中使用,而不加的话其他类也可以调用。(2)加了static的变量只初始化一次(3)static函数与普通函数有什么区别:static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝)
9. 写类目的时候,在写方法的时候到底要不要写 if(self) { self = [super init] }呢?
需要用到本类自己的实例对象的时候才需要self = [super init]。这句话是创建自己的实例对象的意思。
if(self != nil) 这句话的意思是判断有没有alloc,有alloc(分配内存了)才会init(初始化)。
- (instancetype)initWithFrame:(CGRect)frame
{
if(self)
{
self = [super initWithFrame:frame];
[self _initSubViews];
}
return self;
}
<span style="color:#330099;">注意:只有UIView 这个类 必须要调用父类的initFrame等方法,只调用init方法是会报警告的。</span>
10.UIVIew 比较奇葩,他的父类是UIResponder。它在进行【super init】的时候只能这样写,不能也没有类似【super initWithFrame】等,因为UIResponder没有这个方法。
在写类目的时候 最好不要用带有init字眼。这样的话系统回默认你用了系统的init方法,会报警告。所以如果你不想创建本类自己的对象的时候,你就不要使用init字眼,使用create等代替。
我先在要给UIview扩展类目。1.我要不要创建本类自己的对象 ,如果要,那就调用父类的init方法,并且使用【super init】;如果不要,那就不调用父类的方法,并且不要使用init字眼。
11.oc语法关于点表达式的说明:"点表达式(.)看起来与C语言中的结构体访问以及java语言汇总的对象访问有点类似,其实这是oc的设计人员有意为之。如果点表达式出现在等号 = 左边,该属性名称的setter方法将被调用。如果点表达式出现在右边,该属性名称的getter方法将被调用。
12.%@打印的是对象,%p打印的是指针地址.
13.tableview长按的时候还是会走 didSelected方法。但是给cell加长按手势后他就不走 didSelected方法了。也就是说手势的优先级比系统默认cell点击事件的优先级要高。
(我的试验)----(1)我给view加了tap手势,并写了touchbegan方法。点击发现两个方法都走,不过先打印出来的是touchbegan,说明touchbegan的优先级要高于手势.(2)我又给view加了label,发现不管是label.userInterActionEnable等于yes还是等于no(默认是no),你点击lable发现他不会接受事件,而是打印了touch和tap方法。(3)我给view加了button,点击发现tap和touch方法都不走了,而只走button的点击事件。。。。。button好强啊(4)我给view加了touchend方法,发现如果没有加其他手势只有touchbegan的话,那么会走touchbegan和touchend方法。如果加了其他手势的话,会走touchbegan方法,但是touchend方法是不会走的。
如果你给view加了一个手势,而且你当前点击的手势和你加的手势是一样的,那么你加的手势的方法就会走,不会走touchEnd了,只会走touchBegan和你手势的方法。如果不一样,就会走began和end。
14.是不是手势冲突了??????是不是很难过?????那么你要guetureDelegate是干嘛的??????
15.自动布局的约束是什么???其实就是系统通过判断你的约束,然后会计算出frame,最后去渲染.
16.写一个view.......- (NSString *)init 方法名位init或者_init(同时返回值是nsstring)会报错.不知道为什么
17.?????textField当你把文字全部删除之后,textField.text不是等于nil,而是textField.text = @"",不是textField.text =nil啊.
但是:如果你有一个model,model.text(string类型的)没有赋值的话,那么model.text是nil,而不是@"";
定义了一个NSString,没有操作的时候打印为nil,也不是@""
综上所述,只有给其赋值以后然后退格,这样的话位@"".没有赋过值的都是nil;