iOS Tips-01

来源:互联网 发布:python asyncio.wait 编辑:程序博客网 时间:2024/05/22 02:07

1.监听文本框修改的3种方式:

     1.代理

     2.通知 (记得 取消监听)

     3.addTarget  EditingChanged

2. [self performSegueWithIdentifier: identifier sender:nil] 方法的完整实现过程: //self是来源控制器

1.根据identifier去storyboard中找到对应的线,新建UIStoryboardSegue对象

2.设置Segue对象的sourceViewController(来源控制器)

3.新建并且设置Segue对象的destinationViewController(目标控制器)

4.调用sourceViewController的下面方法,做一些跳转前的准备工作并且传入创建好的Segue对象

           (void)prepareForSegue:(UIStoryboardSegue*)segue sender:(id)sender;//这个sender是当初performSegueWithIdentifier:sender:中传入的sender

        5.调用Segue对象的-(void)perform;方法开始执行界面跳转操作

   (1)如果segue的style是push

Ø 取得sourceViewController所在的UINavigationController

Ø 调用UINavigationController的push方法将destinationViewController压入栈中,完成跳转

  (2)如果segue的style是modal

调用sourceViewController的presentViewController方法将destinationViewController展示出来

3.重写一些父类方法的时候 记得 super调用一下..比如..-(void)layoutSubviews


4.如果是通过storyboard来创建主窗口.  那么在application:didFinishLaunchingWithOptions: 方法里面并没有设置keyWindow(代码创建的话是在这个方法里面的).  (注意:self.windo已经被创建了 只是没有设置为App的keyWindow而已.)

现在可以确定是applicationDidBecomeActive:调用的时候 已经设置了keyWindow

5.applicationWillTerminate: 在程序关闭的时候调用. 但是为什么在最小化程序 然后双击home键然后拖动关闭程序的时候 ,这个方法并没有被调用呢???? 
因为程序进入后台的时候 默认情况下会进入休眠状态,应用程序里面的所有事件都不接收,当然不可能调用

6.UIView的 init方法会自动调用 initWithFrame: 方法

7.initialize(). 每个类第一次使用的时候 都只会调用一次 initialize.

    如果有继承的情况 会怎么样呢? 比如 Student继承自Person.在Person里面重写了initialize方法. 那么在Student类第一次被使用的时候, 首先要找到它的父类 即Person 调用一次initialize,然后调用Student initialize()的方法.    重点: 每个类第一次使用都会调用initialize()的方法

    initialize中的代码真的只会调用一次吗? 不一定,当有继承关系的时候,可能会调用多次. 比如 Student继承自Person.在Person里面重写了initialize方法,但是Student并没有重写initialize方法,那么Student就会继承Person的initialize方法.


8.导航控制器下点:

    iOS6控制器的点是从导航条下面开始的    若有tabBar,则到tabBar的最上方的点.

    iOS7控制器的点是从最上面(0,0)开始的.       不管有没有tabBar 都到最下方的点. (但这是可以控制的,可以让iOS7的点的范围和iOS6相同 self.edgesForExtendedLayout)

    在导航控制器下的UITableViewController观察.(若没在导航控制器下的话 不会自动增加64)

     在viewDidLoad的时候self.tableView.contentInset.top 还是0

     在viewDidAppear的时候 self.tableView.contentInset.top 是64(导航条44+导航条上面状态栏的20) 刚好是导航控制条下面

9.layoutSubviews什么时候第一次调用

     viewWillAppear之后 viewDidAppear 之前.

10.在UITableViewcontroller里面 self.view == self.tableView

     但是,在UICollectionViewController里面 self.view != self.collectionView.

11.涉及 Interval 单位是秒

12.只有在init开头的构造方法中,才允许对self进行赋值 (比如 initwithName: 是以initwith开头,不允许对self赋值)

13.block代码默认是不能修改外面 对象/基本类型的值的,要想block中的代码能够修改,要在外面的对象/基本类型前面加上 __block

14.类的初始化方法:

1.+(void)load

* 当某个类第一次装载到OC运行时系统(内存)时,就会调用

* 程序一启动就会调用

* 程序运行过程中,只会调用1

2.+(void)initialize

* 当某个类第一次被使用时(比如调用了类的某个方法),就会调用

* 并非程序一启动就会调用

* 程序运行过程中,可能会调用次.(为什么? 因为当这个类的子类没有重写initialize的方法的时候.子类会继承父类的intialize方法.这样会导致调用多次)

3.在程序运行过程中:1个类中的某个操作,只想执行1次,那么这个操作放到+(void)load方法中最合适

4.load一定比initialize方法调用的早.但是 load方法里面可能会调用到一些类中的方法, 一旦调用类中的方法,在调用方法之前就会调用initialize(可能导致initialize里面的一些输出比load里面的一些输出要早). 


0 0
原创粉丝点击