Object C学习初步

最近乘着项目不太紧张的时候,赶紧给自己冲了一下电。其实我自己最熟悉的平台应该是.net,所以当初上手windows phone的话是很快,我记得当初是一边跟着项目进展,一边自己开始学习前台的XAML语言以及页面的布局,所以一个项目跟下来的话windows phone平台也就差不多了。

早先就有过学习ios的想法,应该iphone实在是太酷了,感觉开发ios比windows phone更加有成就感。但是前前后后一直在往后推迟,因为ios的同事们一直给我灌输的思想就是oc语言还有挺难学的,相比较c#,jave实在是相差有点大。好吧!最近几天就是带着这种畏惧的思想开始看一些oc入门的书籍,整个看下来的话,其实也没有传说中的那么难嘛!

好了,不扯远了,让我们回到主题上面来吧!本文主要还是想要梳理一下自己学习过程中影响比较深的知识点,如果有什么不周到的地方欢迎拍砖。

首先如果你之前没有oc基础的话,你初一看oc代码,你会发现这很是奇怪呀!其实我本人觉得oc最大的特点就是更加的像我们的自然语言。首先在你利用xcode新建一个iphone项目之后,你会发现一个页面文件(.nib)竟然默认是关联着两个文件的(.h和.m),开始我学的时候我也很好奇这两个文件到底是什么东东呢?我想如果你做过windows phone或者andorid的话,你就会很习惯一个前台布局页面,一个后台代码逻辑处理页面(当然如果后台逻辑比较复杂的话,你可能需要拆分到不同的类文件)。好了,不卖关子了,其实.h文件又称作是头文件,在这个文件里面你可以定义需要关联到前台页面布局文件的控件,比如IBOutLet *UILabel;然后下面你需要提供该控件的属性,就跟c#里面的get,set一样。只不过在oc里面默认提供了特性语法,可以快速的实现属性的定义,当然在这个方法里面你还可以提供一些方法的签名。然后与当前该.h文件重名的.m文件就是具体的实现处理逻辑的地方。在这个.m文件里面,首先我们需要实现.h文件里面定义的属性和方法(注意这些属性、方法通常是需要关联到前台的页面控件上面的),然后我们就可以在这些方法里面定义我们自己的处理逻辑了。

在ios里面都是采用mvc模式的,所以页面和处理代码的脱离就全靠控制器了。比如我们在.h文件里面定义了一个按钮的点击事件,那么我怎样与前台页面的按钮关联起来呢?我们是不是可以像windows phone里面直接一个Button控件拖拽到页面,然后Click事件一订阅就自动关联起来了呢?哈哈,在ios里面你可能需要麻烦一点你先要将UIButton控件关联到一个控制器上面,然后再将相应的按钮事件关联到控制器(.h文件)里面定义的事件上面。

好了,现在能够将页面和代码处理逻辑关联起来了,那么后面我遇到一个比较棘手的问题就是我怎样能够将一些重复代码抽离出来呢?即我怎么能够像c#里面通过定义一些继承,接口,公共方法实现oop呢?这就涉及到oc里面的类、结构的定义了,在oc里面定义这些东东我们需要使用@符号。比如现在我们假设这样一种场景,我们需要在一个页面上面画出一个长方形和一个三角形,比较死板的方法是我们相应.m文件“啪啪啪”敲两个方法分别来实现长方形和三角形的绘制工作,好一点的话,我们可能会将两个方法里面重复的部分重构到另一个方法里面(重构的方法还是在该类里面,而不是另外一个基类里面)。那么我们有没有什么最有的做法呢?其实只要我们好好想一下这个问题的实现就会知道,它们无非是形状不同而已。我们完全可以将它们所具有的公共方法抽离到一个shape基类里面,然后两个类从中继承就可以了。

好了,说了这么多的具体页面实现细节,让我们来谈一谈cocoa这套框架吧!cocoa主要分为两部分:fundation kit和application kit,具体这两个有什么区别我也没有细细研究过,但是我明白的一点就是application kit似乎是更接近界面一点。在fundation kit里面我们可以找到NSString,NSArray,NSDictoary等一些常用的类型,你也需要奇怪为什么所有的类型前面都加了个NS呢?这就跟乔布斯,跟皮克斯有关系了,我还想说一点的就是cocoa这套框架页面从早先皮克斯的一套框架脱胎过来的。那么我们怎样定义这些变量呢?比如在c#,java里面我们需要一个string类型,我们就会直接string xxx;但是oc里面却不是这样的,我们需要NSString *xxx;有没有前面多了个*,这就是oc更接近c的原因了,在这个定义里面我们能够明确的看到当前的NSString变量是一个指针,它指向真正的对象。在c#,java里面虽然string类型也是引用类型,也指向真正的对象,但是它们将自己隐藏的更好了。好了,一个NSString类型的变量定义好了,我们怎样去初始化它们呢?是不是直接向c#里面直接丢个""或者stirng.empty过去就可以了呢?其实oc里面的实例化可以分为三类:1.new;2.使用相应的初始化函数;3.使用alloc init;oc里面一般是不使用new的,我个人认为是需要自己释放资源,当然你也可以将实例化的对象丢到自动释放池里面,而且事实上alloc init的这种方式就是这种情况;首先调用alloc分配资源,然后调用init初始化;

好了,说完oc里面一些基础的类型,让我们来看一看一些高级的特性:类别,委托,非正式协议,正式协议;在写oc程序的时候,最不习惯就是方法的使用通常要用[]括起来,其实习惯之后,你就会发现方法调用读来很想一句自然话;回到类别,类别就像是c#里面的扩展方法,比如现在我们设想一下这种情况,如果我们需要调用一个.tostring方法自动实现输出姓名+身份号+职业;c#里面最好的方法是使用扩展方法,oc里面也为我们提供这种实现,定义的方法是@类名<自定名称>,然后下面就是方法的实现。其实类别还为拆分代码,组织处理逻辑提供了便利;委托在oc里面算是用的比较多的了,因为本身mvc模式,例如一个UITableView展示数据之后,用户点击某一项的操作,我们需要委托到一个方法里面去处理,在头文件里面(.h文件)实现后面我们还需要显示的实现委托跟数据源;非正式协议就跟c#里面的接口差不多了,只不过非正式协议定义的方法我们不需要全部去实现罢了;正式协议里面我们需要用到一个专门定义的关键字,然后这里面定义的方法,我们需要跟接口一样全部实现;先说这么多了。  

Object C学习初步

时间: 2024-10-18 11:32:40

Object C学习初步的相关文章

Java Object类学习笔记

看下Api文档的一些说明 public class Object Class Object is the root of the class hierarchy. Every class has Object as a superclass. All objects, including arrays, implement the methods of this class. Since: JDK1.0 从JDK1.0就已经存在的元老类,类结构的根,所有类的父类,所有类都实现了这个类的方法,包含

Object C学习笔记25-文件管理(一)

在此篇文章中简单记录一下文件管理,在Object C中NSFileManager用于管理文件已经路径.在Object C中的文件路径可以是相对路径也可以是绝对路径.斜线"/"开头,斜线实际上就是一个目录,称为 根目录.字符(-)用作用户主目录的缩写.点" . "表示当前目录,两点"  .. "表示父目录. 一. 创建NSFileManager 对象 NSFileManager非常简单,可以使用如下方式来创建NSFileManager对象. NSS

Object C学习笔记26-文件管理(二)

上一篇简单的介绍了如何获取文件属性,删除,拷贝文件等,本文继续记录Object C中文件IO操作. 一. 获取文件的执行主目录 在Object C中提供了一个方法 NSHomeDirectory() 用于获得执行执行的主目录,使用如下代码测试: NSString *homePath=NSHomeDirectory(); NSLog(@"执行文件的主目录:%@",homePath); 通过以上代码可以正确的输出应用程序的执行目录,上一张也提到了文件的目录问题,这个和Windows系统的有

MySQL数据库学习初步

我使用的环境是Win7,开始学习PHP和MySQL,并且买了本<Head First PHP & MySQL>,可以从Head First Labs官网获得HeadFirst系列书籍的相关信息和源代码. 1.下载XAMPP开发包 从XAMPP中文官网下载目前比较流行的PHP开发包,XAMPP是完全免费且易于安装的Apache发行版,其中包含MySQL.PHP和Perl.XAMPP适用于Windows.Mac OS X和Linux,XAMPP开放源码包的设置让安装和使用出奇容易.我下载的

mongoDB学习初步总结

What? 最受欢迎的非关系型数据库之一.面向文档的数据库,在存储乎数据方面与关系型数据库有着本质的区别. Why? 简单易用 对多变的业务需求,适应性强于SQL型DB 性能 复制 索引 分片 丰富的查询 灵活的数据模型 毫不逊色的速度 海量数据下表现好 对程序员友好,但是是DBA的噩梦,维护性不佳 构成 相对于SQL数据库 行-> 表 -> 数据库 而言,mongoDB的组织结构是: document -> collection -> DataBase 其中的document ,

Swift学习初步(一)

前几天刚刚将有关oc的教程草草的看了一遍,发现oc其实也不像传说的那么难.今天又开始马不停蹄的学习Swift因为我很好奇,到底苹果出的而且想要代替oc的编程语言应该是个什么样子呢?看了网上的一些中文教材之后,才发现原来swift真的是太灵活,相比较之前oc语言真的是有天壤之别了.随着学习的深入,我发现自己真的喜欢上了swift,鉴于网上的教程还不是太多的缘故,我就萌生了将自己的一些学习体验写成一系列博客的想法,如果有什么不全面的地方欢迎大家来拍砖. 首先我来说说自己对于swift的第一印象吧!那

Ajax 学习初步

Ajax学习 第一步.创建 XMLHTTPRequest 对象 为了应对所有的现代浏览器,包括 IE5 和 IE6,请检查浏览器是否支持 XMLHttpRequest 对象.如果支持,则创建 XMLHttpRequest 对象.如果不支持,则创建 ActiveXObject : var xmlhttp; if (window.XMLHttpRequest){ // code for IE7+, Firefox, Chrome, Opera,Safari xmlhttp=new XMLHttpRe

VTK 学习初步

VTK相关的基础知识 VTK,visualization toolkit,可视化工具包,主要应用于三维计算机图形.图像处理和可视化方面.它在三维函数库OpenGL的基础上采用面向对象的设计方法发展而来,且具有跨平台的特性. VTK面向对象,含有大量的对象模型. 源对象是可视化流水线的起点,映射器(Mapper)对象是可视化流水线的终点,是图形模型和可视化模型之间的接口. 回调(或用户方法): 观察者监控一个对象所有被调用的事件,如果正在监控的一个事件被触发,一个与之相 应的回调函数就会被调用.

Qt Meta Object system 学习

原文地址:http://blog.csdn.net/ilvu999/article/details/8049908 使用 meta object system 继承自 QOject 类定义中添加 Q_OBJECT 宏 使用 moc 程序对包含该宏的文件进行处理 采用 qmake 进行处理时,如果头文件xxx.h内包含 Q_OBJECT 宏,将生成 moc_xxx.cpp 文件.如果xxx.cpp文件内包含宏,将生成 xxx.moc 文件(这时,我们需要在xxx.cpp文件内添加 #include