记录一个菜鸟的iOS学习之旅,如能帮助正在学习的你,亦枫不胜荣幸;如遇路过的大神指导一番,亦枫感激涕淋!
通过前两节的学习,我们接触了一个经典编程语言初学者的必经项目 —— HelloWorld 的创建与运行。其中,在View Controller Scene中设计了控件,并在代码中为控件添加触摸事件。这也是一个移动端应用基本的开发工作,即拥有可以显示数值的View,同时这些View能够响应各种事件。
为了将场景(Scene)中的控件和代码中定义的事件建立联系(即连接,Segue),iOS开发语言中引入了“输出口”和“动作”的概念。亦枫画了一幅图来描述他们之间的作用机制:
作用机制.jpg动作是为了响应控件的触摸事件而在代码中定义的方法,名字可以自由取值,返回值类型为IBAction,其中sender参数表示事件源,即响应事件的控件对。sender参数可以省略,如上图中的事件方法可以写成:
- (IBAction) onClick;
View Controller Scene中设计的控件在代码中创建输出口和动作有两种方式:一种就是上一节文章中介绍的方式,先写代码,后建连接;第二种方式比较便捷,简单的通过辅助编辑器(Assistant Editor)和拖拽即可完成。
快捷创建输出口和动作.gif操作过程如上图所示。在以后的学习中,我们会发现,其实,含有委托协议的控件也能通过这种方式快捷创建委托方法,减少写代码的工作量。
最后,顺便再提一下上文输出口的属性。在定义输出口变量时,在property关键字后面添加了两个属性,weak和nonatomic,这里简单介绍一下,毕竟是为了打好基础嘛。
-
atomic
原子操作。原子性是指事务的一个完整操作,在objective-c 属性设置里面默认的就是atomic,意思就是setter/getter函数是一个原子操作,如果多线程同时调用setter时,不会出现某一个线程执行完setter所有语句之前,另一个线程就开始执行setter,相当于函数头尾加了锁。这样的话并发访问性能会比较低; -
nonatomic
非原子操作。一般不需要多线程支持的时候就用它,这样在并发访问的时候效率会比较高。在objective-c里面通常对象类型都应该声明为非原子性的。 iOS中程序启动的时候系统只会自动生成一个单一的主线程。程序在执行的时候一般情况下是在同一个线程里面对一个属性进行操作。如果在程序中我们确定某一个属性会在多线程中被使用,并且需要做数据同步,就必须设置成原子性的,但也可以设置成非原子性的,然后自己在程序中用加锁之类的来做数据同步。通常说nonatomic 是提高在非多线程应用中的读写效率。 -
strong
强引用。引用的存亡直接决定了所指向对象的存亡。如果不存在指向一个对象的引用,并且此对象不再显示在列表中,则此对象会被从内存中释放; -
weak
弱引用。不决定对象的存亡,即使一个对象被持有无数个弱引用,只要没有强引用指向它,那么还是会被清除。 指针置为nil。
至于属性的声明和属性的调用,即Property和snythesize关键字的配套使用,大家就自己去网上查询,这里就不加以复述,毕竟需要将精力放置在iOS开发上面,对于OC编程语言的基础知识,除了难点和疑惑点,尽量不作介绍。
给大家附上参考链接:
今天的文章到此结束,明天敬请期待。。。
网友评论