OC学习二

协议&分类
OC中的协议相当于java中的接口类型。
分类在java中实现起来比较麻烦还有限制。他就是对一个已有的类进行添加一些新的功能,比如系统中操作字符串的类NSString,他没有校验手机号的这个功能,那我们就可以给NSString添加一个分类,自己写一个校验手机号的功能,后续再使用NSString类型的话就可以直接调用这个功能了。android中的Kotlin语言已经支持这个功能开发,只是java还没有,是因为Java中String类是final类型的,不能被继承,所以实现不了这种扩展功能。

KVC&KVO操作
KV就是键值对Key-Value。
KVC就是属性键值对进行编码(Coding)意思就是可以操作属性,比如可以通过属性名去设置该属性的值。在java中可以使用内省或者反射机制去实现。因为在java中属性的规定是:只要有对应的set和get方法都叫做属性。而属性名是getXXX方法的XXX,和具体定义的属性名没有关系。在OC中属性名就是我们定义的属性名,而get和set方法时系统自动生成的。这个和Kotlin语法中一样。
KVO操作就是键值对属性的观察者(Observer)。这个功能的作用就是可以监听一个类的属性的值的变化。如果想跟踪一个属性的值的变化,做一些指定事件触发等。java中也可以实现,只是Java中没有那么强的规则,比如有些人会定义属性直接使用public类型,然后不定义get和set方法,这么在调用一个属性的时候肯定就观察不到了,除非监控内存。如果Java中有很强的规则,属性必须是private的,然后使用的时候必须调用get和set方法,我们只需要在这两个方法中添加一个监听回调就也可以做到KVO的功能。不过这个都是自我约束实现。

集合类功能
OC中像NSArray和NSDirctionary用的比较多。他们相当于Java中的List和Map结构。在OC中还需要注意的就是如果类型中没有Mutable的类型都是不可变结构类型,比如NSArray数组,他是不能进行增删改操作的,对应的NSMutableArray类型才可以。

基础功能类框架:Founction
这个框架类似于java中的lang包和util包中类的功能,OC中的Function框架包括了基础的功能类,比如上面的集合类,还有哦常用的NSNumber类:主要用来操作数据类型的。NSData类:操作日期类型的。还有一个类的鼻祖NSObject类也是在这个框架中。

UI知识概要 

常用控件介绍:显示文本控件UILable。显示图片控件UIImageView。显示提示框控件UIAlertView(Ios8已弃用),UIAlertContral在Ios8之后启用。开关控件UISwitch。因为ios系统本生的这些控件设计就很完美,所以一般都是直接拿来就用了。而不像Android中系统的对话框不是那么完美,很多情况都会重新定义设计。

高级View介绍:主要介绍两个UITableView和UIScrollView。其中UITableView和Android中的ListView用法差不多,而UIScrollView类似于Android中的ScrollView,但是他的功能比ScrollView请打很多。在ios中实现分页、切换页都是使用这个空间进行操作的。而在Android中会使用ViewPager实现切换页面。

自定义视图View介绍:不管是Android还是ios开发,一些系统的控件有时候不能满足我们的需求,这是就需要去自定义一些控件了,自定义控件和Android也很类似,ios中继承UIView之后,在drawRect方法中使用CGContextRef类进行绘制各种图形即可,在Android中是在onDraw中使用Canvas进行绘制的。

控制器介绍:ios中的控制器就是和android中的Activity组件功能类似,可以展示View,有自己的生命周期方法。而控制器系统提供了两个常用的控制器:UINavigationController和UITabvarController,这两个控制器的使用场景是UINavigationController主要用来操作视图的导航功能,比如从一个页面跳转到另一个页面,这个控制器其实就是一个栈功能,进入的话就用push操作,出来的时候使用pop功能来实现指定的页面跳转,在Android中需要使用Intent来进行startActivity操作。另一个UITabBarController功能主要用来实现菜单视图切换功能。比如微信里面底部的四个菜单切换功能。我们还可以自定义一个控制器功能。

Android中我们知道有很多时间需要特殊处理,比如ListView的向下滑动,ViewPager的左右滑动等,在ios中也一样,有些特殊需求就要处理时间。

多线程操作
ios中的多线程操作比java中的县城操作方便点,因为他的Api比较少,主要有四个知识点:
1.自定义线程NSThread类,类似于Java中的Thread类
2.任务类NSOperation,类似于Java中的Runnable类
3.任务队列类NSOperationQueue,类似于Java并发库中的Queue类
4.GCD功能,这个功能主要是C语言实现的,他的优势可以重复利用设备的多核硬件资源,让多线程操作更加高效,也是苹果官方提倡使用的一种方式。

数据本地存储
每个应用都有自己的沙盒结构,这个和Android中很类似,只有本应用才有权限进行操作,Android的数据存储主要包括:SharePreference,数据库,SD卡等,而在ios中主要包括以下几点:
1.Plist:一般可以把数组和字典数据对象保存到本地的plist文件中。
2.Preference:保存用户的基本设置,和Android中的SharePreference类似;
3.NSKeyedArchiver:归档和解档,可以把对象进行序列化,和Java中的ObjectInputStream类似;

网络访问功能
在Android中用的比较多的是HttpClient类,在ios中也有类似一些系统提供的网络访问api使用,主要包含:
1.NSURL:定义一个网络访问的URL地址。
2.NSURLRequest:网络访问请求对象,可以设置请求的参数。
3.NSURLConnection:直接连接访问,系统自动创建一个子线程进行访问。
3.UIWebView:这个和Android的WebView很类似,可以访问网页内容。但是和Android中的WebView还是有区别的。
Android的WebView有一个经典的漏洞就是在JS中可以使用getClass获取到对象类的对象,然后调用Runtime类执行命令获取设备数据信息,就是因为Android中可以使用addJavaScriptInterface方法设置本地对象导致的,在ios中不可以这么做,如果想在JS中调用本地方法需要想其他方法。
android开发想要学习OC语言的一个好的参考内容

猜你喜欢

转载自blog.csdn.net/qq_34198206/article/details/84580980