iOS编程习惯

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;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值