热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

洪小瑶学IOS(一):准备起航ObjectiveC基础教程笔记

做flash开发一枚,因为ANE等各种发展问题,决定再投资自己学习IOS开发。IOS开发,目的其一:ANE,目


做flash开发一枚,因为ANE等各种发展问题,决定再投资自己学习IOS开发。


 


IOS开发,目的其一:ANE,目的其二:兴趣。


 


资料准备:  也准备了英文版本,怕临时翻译问题。


设备:apple air  iphone 4s   ipad2  各一台。


 


 



 


 


Objective-C基础教程1-6章节


ective-C基础教程1-6章后,对一些东西的笔记,并不是完整的教程,只是类似拾遗,将一些不同的,不熟悉的东西记下来


一切都源于Hello World 恒古不变的定律,熟悉一门语言结构最快也就是这个万能的程序了,Objective-C扩展名为.m(之后书中也有提到.mm就是C++风格)


 





Objective-c代码  
收藏代码


  1. #import   
  2. int main(int argc, const char *argv[]){  
  3.     NSLog(@"Hello Objective-C");  
  4.     return (0);  
  5. }  


 


其中NSLog方法是Objective-C专属的一种类型,所有cocoa的对象都被冠以了NS前缀,作为区分。传入的参数@""表示字符串作为NSString被处理,程序其余部分和C类似,#import的含义也不言而喻


布尔值


Objective-C中的布尔变量有些许小的不同,参数类型为BOOL,值为YES/NO,其中YES为1,NO为0,占8位


需要注意的是,如果将一个int,short这样的值赋给BOOL,只有低位字节会发挥作用,这是特别要注意的,因为这意味着,并不是传统认为的,非零即为true


Objective-C中有一种特有的语法:[对象 操作] 这在之后会一直看到


关于Objective-C中的OOP


@interface


 


 





Objective-c代码  
收藏代码


  1. @interface Circle:NSObject  
  2. {  
  3.     ShapeColor color;  
  4.     ShapeRect bounds;  
  5. }  
  6. -(void) setFillColor: (ShapeColor) color;  
  7. -(void) setBounds: (ShapeRect) bounds;  
  8. -(void) draw;  
  9. @end  


 


以上就是标准的一个@interface定义,应该很好理解,Circle含有2个变量color,bounds,拥有3个方法


特别注意方法的申明方式 


(void) 表示返回类型 之后是方法名及参数


draw方法不含参数 也不用:


对于多个参数的方法申明


-(void) setTire: (Tire *) tire atIndex:(int) index;(这里的第二个参数看起来有些奇怪,但是在之后调用方法的过程中,atIndex会被用到)


Objective-C的方法调用使用了一种被称为中缀符的东西


看一下分别调用无参,1参和多参的语法


 





Objective-c代码  
收藏代码


  1. [circle draw];  
  2. [circle setFillColor:kRedColor];  
  3. [car setTire:tire atIndex:2];   


 


@implementation


与名字相同,实现,就是对@interface所申明内容的具体实现


 





Objective-c代码  
收藏代码


  1. @implementation  
  2. -(void) setFillColor:(ShapeColor c)  
  3. {  
  4.     color=c;  
  5. }  
  6. @end  


 


这里的color=c其实就相当于self.color=c(这里我又要做类比了,目前的认识self就相当于java中的this指针)


有了@interface和@implementation之后,我们对一个类(对象)的定义就算完成,那么如何实例化一个对象


 





Objective-c代码  
收藏代码


  1. id shapes[3];  
  2. shapes[0]=[Circle new];  
  3. [shpaes[0] setBounds:rect];  
  4. ...  


 


这里又看到一个新的东西id,它是一种指向某个对象的指针,目前为止只是看到这一种用法,也没有太多认识,简单的被我理解成了索引


之后看到了new对象的方法[Circle new],再之后是调用对象的方法设置具体的参数


继承


 





Objective-c代码  
收藏代码


  1. @interface Circle:Shape  


 


很简单的方法,Objective-C在继承规则上于java,C#无异,不允许多重继承,不过既然有接口(或者应该叫协议),那么自然同java一样,达到相同的目的自然不难,同样的,子类可以调用父类的方法,通过super,比如[super setColor:c];


Ojbective-C中的空值为nil


接下来 来看一个Car是被如何自动构建的


 





Objective-c代码  
收藏代码


  1. @implementation Car  
  2. -(id) init  
  3. {  
  4.     if(self=[super init]){  
  5.         engine=[Engine new];  
  6.         ...  
  7.     }  
  8.     return (self);  
  9. }  


 


这一段有些理解不能,在书中的注释中说到,这里指如果超类可以完成所需的一次性初始化,需要调用[super init]。init方法的返回值id描述了倍初始化的对象。将[super init]的结果赋给self是Objective-C的标准惯例。


Objective-C中一样有getter/setter方法,但是在命名规则上需要注意


 





Objective-c代码  
收藏代码


  1. -(Engine *)engine;  
  2. -(void) setEngine: (Engine *) engine;  


 


在set方法中 依然采取setXXX的方式 但是get方法则直接采用XXX 而非getXXX,以免混淆


拆分


一般将@interface部分放入.h文件中


 





Objective-c代码  
收藏代码


  1. #import   
  2. @interface Tire:NSObject  
  3. @end  


 


将其他部分放在.m中,在.m中记得引入该头文件


#import "Tire.h"


import下<>代表系统头文件 ""代表本地头文件


关键词&#64;class 告诉编译器此处是一个类&#xff0c;还需要通过指针进行传递


 





Objective-c代码  
收藏代码


  1. &#64;class Tire  
  2. &#64;class Engine  
  3. ...  
  4. Engine *engine  


注意这只有在通过指针指向其他类的情况下可用&#xff0c;减少编译器负担&#xff0c;在继承的情况下不可用&#xff0c;因为他需要了解超类的信息


 


 


推荐oc视频教程&#xff1a;http://www.youku.com/playlist_show/id_4545842.html


 


 


 


 


 


 


转载于:https://www.cnblogs.com/bulolo/archive/2013/03/02/2940144.html



推荐阅读
  • 本文介绍了iOS应用开发的主要框架,包括Foundation、UIKit、CoreData及CoreGraphics等,并探讨了开发iOS应用所需的硬件和软件环境,以及推荐的编程语言。 ... [详细]
  • C语言入门精选教程与书籍推荐
    本文精选了几本适合不同水平学习者的C语言书籍,从基础入门到进阶提高,帮助读者全面掌握C语言的核心知识和技术。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • IOS Run loop详解
    为什么80%的码农都做不了架构师?转自http:blog.csdn.netztp800201articledetails9240913感谢作者分享Objecti ... [详细]
  • 在《Cocos2d-x学习笔记:基础概念解析与内存管理机制深入探讨》中,详细介绍了Cocos2d-x的基础概念,并深入分析了其内存管理机制。特别是针对Boost库引入的智能指针管理方法进行了详细的讲解,例如在处理鱼的运动过程中,可以通过编写自定义函数来动态计算角度变化,利用CallFunc回调机制实现高效的游戏逻辑控制。此外,文章还探讨了如何通过智能指针优化资源管理和避免内存泄漏,为开发者提供了实用的编程技巧和最佳实践。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • Netflix利用Druid实现高效实时数据分析
    本文探讨了全球领先的在线娱乐公司Netflix如何通过采用Apache Druid,实现了高效的数据采集、处理和实时分析,从而显著提升了用户体验和业务决策的准确性。文章详细介绍了Netflix在系统架构、数据摄取、管理和查询方面的实践,并展示了Druid在大规模数据处理中的卓越性能。 ... [详细]
  • 本文详细介绍了Objective-C中的面向对象编程概念,重点探讨了类的定义、方法的实现、对象的创建与销毁等内容,旨在帮助开发者更好地理解和应用Objective-C的面向对象特性。 ... [详细]
  • 开发技巧:在Interface Builder中实现UIButton文本居中对齐的方法与步骤
    开发技巧:在Interface Builder中实现UIButton文本居中对齐的方法与步骤 ... [详细]
  • 本文详细介绍了 Apache Jena 库中的 Txn.executeWrite 方法,通过多个实际代码示例展示了其在不同场景下的应用,帮助开发者更好地理解和使用该方法。 ... [详细]
  • 本文探讨了如何在编程中正确处理包含空数组的 JSON 对象,提供了详细的代码示例和解决方案。 ... [详细]
  • 本文探讨了如何在Android框架下通过自定义资源文件实现系统风格的统一,包括系统资源文件的位置、引用方法、系统主题的设置及修改等内容。 ... [详细]
  • Android开发经验分享:优化用户体验的关键因素
    随着Android市场的不断扩展,用户对于移动应用的期望也在不断提高。本文探讨了在Android开发中如何优化用户体验,以及为何用户体验的重要性超过了技术本身。 ... [详细]
  • 本文旨在探讨Swift中的Closure与Objective-C中的Block之间的区别与联系,通过定义、使用方式以及外部变量捕获等方面的比较,帮助开发者更好地理解这两种机制的特点及应用场景。 ... [详细]
author-avatar
耶丝儿小丶姐
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有