Objective-c基础知识学习笔记(一)

一直有记录笔记的习惯。但非常久没分享一些东西了,正好上半年開始学习IOS了,如今有空写点。因开发须要,公司特意为我们配置了几台新MAC。还让我们自学了2周时间。就正式进入开发了。如今将自己了解的一些基础知识分享一下。

一、开发工具

svn管理工具:versions(备注:个人感觉这个工具不是非常好用。常常操作缓慢并且卡顿)、开发工具:xcode

二、IOS系统架构

IOS是基于UNIX内核,Android是基于Linux内核。

IOS的系统架构分为四个层次,从下到上依次是:核心操作系统层(Core OS layer)、核心服务层(Core Services layer)、媒体层(Media layer)和可触摸层(Cocoa Touch layer)。

1、Core OS是位于iOS系统架构最以下的一层,是核心操作系统层,它包含内存管理、文件系统、电源管理以及一些其它的操作系统任务,能够直接和硬件设备进行交互。作为app开发人员不须要与这一层打交道。

2、Core Services是核心服务层,能够通过它来訪问iOS的一些服务。

3、Media是媒体层,通过它我们能够在应用程序中使用各种媒体文件。进行音频与视频的录制。图形的绘制。以及制作基础的动画效果。

4、Cocoa Touch是可触摸层,这一层为我们的应用程序开发提供了各种实用的框架。而且大部分与用户界面有关,本质上来说它负责用户在iOS设备上的触摸交互操作。

三、重要后缀说明

.h后缀的文件指头文件。描写叙述类、类的数据成分以及类的方法。相当于接口。

.m后缀的文件是实现文件(源文件)

.xib后缀文件,是interface builder文件,存放应用程序的用户界面(UI)

四、基础语法

Objective c是面向对象的

1、#import(引入头文件)语法

eg:#import<Foundation/Foundation.sh>

#import"SelfClass.h"

@classSelfClass

备注:<>仅仅在系统文件里查找,””先在本地查找,没找到则到系统文件里查找,import可自己主动防止同一个文件被导入多次。实例变量类型一般用@class引入,这个能够缩短编译时间。一般用在interface中,里面的方法和变量不可用。

2、字符串NSString

@"字符串"

3、BOOL布尔类型

有YES和NO两个值,备注:的数不一定是YES。

4、控制台输出NSLog()

%@输出NSString等对象的值

五、类的定义与实现

1、@interface用于定义接口类

接口一般在.h文件(头文件)中定义,用来展示类的构造。

Eg:定义基于NSObject类的Circle类

@interfaceCircle :NSObject

{

ShapeColor *fillColor;

}

-(void) draw;

-(void)setFillColor: (ShapeColor *) fillColor secondName:(int) index;

@end

1)、大括号内的变量为类的实例变量(仅仅在对象的实例中有效,所以称为实例变量ivar),后面的为方法声明。备注:c函数原型中没有先行短线。

2)、方法返回类型与C函数有同样的类型:标准类型(整型、浮点型、字符串)、指针、引用对象和结构体,假设方法使用參数则须要冒号,否则不须要冒号。

没有声明实例变量时,无需大括号。

3)、上面多參数方法定义。也能够不须要secondName,但不推荐这样使用。

4)、有些方法的声明是先行加号。这种方法为类方法(class method),这种方法属于类对象(而不是类的实例对象),类似于静态方法,通经常使用于创建新的实例,我们称这种用来创建新对象的类方法为工厂方法。

5)、在对象类型的右边都有一个*号,全部的对象变量都是指针类型。id类型(随意类型)已经被提前定义为指针类型。所以不须要再加一个*号。

2、@implementation

实现类一般在.m文件(实现文件)中实现,实现了接口所声明的全部方法。

Eg:上面Circle的实现类

@import “XXX.h”//引入上面定义的头文件

@implementationCircle

- (void)setFillColor: (ShapeColor *) c

{

fillColor = c;

}

3、对象的实例化

1)、Circle *circle = [Circle new];//不建议这样使用

2)、Circle *circle = [[Circle alloc]init];//一般这样初始化

4、方法的调用

[ciclesetFillColor: kRedColor];//备注中间是空格

5、实例变量作用域的指令:

@protected实例变量可被该类及不论什么子类中定义的方法直接訪问(默认的情况)。

@private实例变量可被定义在该类的方法直接訪问,不能被子类定义的方法直接訪问。

@public实例变量可被该类中定义的方法直接訪问,也可被其它类或模块中定义的方法訪问。使得其它方法或函数能够通过(->)来訪问实例变量(不推荐用)。

@package 对于64位图像,能够在实现该类的图像的不论什么地方訪问这个实例变量。

6、继承

@interface Circle: NSObject

不支持多继承。但Objective-C通过其他特性达到多继承的效果,比如类别和协议。

7、复合(composition)

复合就好像音乐中的作曲一样:将多个组件组合在一起。配合使用,从而得到完整的作品。严格来说。仅仅有对象间的组合才干叫复合。

复合类之间的关系为“has a”。备注:在Objective-C中。复合是通过包括作为实例变量的对象指针实现的。

Eg:汽车有4个轮胎和一台发动机。

@interface  Car:NSObject

{

Engine *engine;

Tire *tire[4];

}

备注:为新建的Car对象分配内存时,这些指针将被初始化为nil(零值)

六、id

id shapes[2];

shapes[0] = [[Circlealloc]init];

shaoes[1] =[ [Egg alloc]init];

它是指向随意类型对象的指针,相当于范型。

七、存取方法名命名

1、setter方法须要在属性名称前添加set前缀,eg:setEngine

2、getter方法则是以其返回的属性名称来命名。eg:engine不要将get用作getter方法的前缀。比如方法getEngine违反了命名惯例。get这个词在Cocoa中有特殊的含义,假设get出如今Cocoa的方法名中,就意味着这种方法将你传的參数作为指针来返回数值。

Objective-c基础知识学习笔记的更多相关文章

  1. 〖前端开发〗HTML/CSS基础知识学习笔记

    经过一天的学习,把慕课网的HTML/CSS基础知识学完了,笔记整理: 1. 文件结构: HTML文件的固定结构: <html> <head>...</head> & ...

  2. java基础知识学习笔记

    本文知识点以js为参照.对比分析得出笔记.JavaScript之所以叫JavaScript是打算借助java推广自己.虽然都是开发语言,但JavaScript一开始主要运行在 客户端,而java主要运 ...

  3. 传智播客 Html基础知识学习笔记

    HTML基础 <p></p>标志对用来创建一个段落,,<p>标志还可以使用align属性, 它用来说明对齐方式 语法是:<p align="&quo ...

  4. Unity基础知识学习笔记二

    1,object Instantiate(object original,Vector3 position,Quaternion rotation)       克隆原始物体,并返回克隆物体.     ...

  5. Unity基础知识学习笔记一

      1,Unity 4.5.4这个版本,在打包ios应用程序的时候.会生成一个xcode工程,但是这个工程无法在xcode6上变异,无法生成ios8上发布.所以unity在ios8发布3天内就发了4. ...

  6. jquery基础知识学习笔记

    jquery是一个js库/常用版本是jjquery-1.7.2.js/这个版本主要是用来做开放用途 做产品的时候是用它的min版本.玩jquery的时候,不管干啥都要花钱(美元)   注意点: 1.s ...

  7. CSS基础知识学习笔记

    1.css基本样式讲解 1.1 css背景background-attachment:背景图像是否固定或者随着页面的其余部分滚动background-color:设置元素的背景颜色background ...

  8. 传智播客 Html基础知识学习笔记2

    一.<select>标签 用来创建类似于WinForm中的ComboBox(下拉列表)或者LisBox 如果size大于1就是LisBox,否则就是ComboBox; <select ...

  9. JAVA 基础知识学习笔记 名称解释

    Java ee:​ IDE: ​ itegrity   development environment 集成开发环境 JMS:​ java Message Service java   信息服务 JM ...

随机推荐

  1. T - Amusing Joke(map)

    Problem description So, the New Year holidays are over. Santa Claus and his colleagues can take a re ...

  2. JSP页面使用EL表达式内容显示不全问题记录

    1.当EL表达式里面的值存在引号之类的字符时, ${caseparam.cp_value}的值为 {"cpage":"1","resType" ...

  3. office 2010 破解

    使用Rearm命令激活延迟重置Office 20101.安装Offcie 2010 安装Offcie 2010,默认30天的试用期,这里要注意,上文提供的Office 2010是零售版,所以没有序列号 ...

  4. EntityFramewok 插入Mysql数据库 中文产生乱码解决

    首先Mysql表,建表的时候,有没有选择UTF8,如果是默认的编码latin1,就会产生乱码 这里修改后,还是乱码,那就要检查发生乱码的列是不是UTF8格式 然后修改App.Config或者Web.C ...

  5. RFC1867 HTTP file upload

    RFC1867 HTTP file upload RFC1867 is the standard definition of that "Browse..." button tha ...

  6. 【JAVA练习】- 一个逻辑题

    打印 1 3    4 5   8    12 7   12   20   32 9    16  28    48   80  ..... 输入任意一个奇数,输出那一行的数据 第一种方法找到规律进行 ...

  7. py2exe打包遇到的问题

    py2exe打包python成.exe文件 打包过程和结果 1.创建setup脚本打包文件,其中设置打包的属性和方法.注意:尽量将被打包文件和此打包脚本放在同目录下(因为在尝试非同目录下时,出现了非可 ...

  8. AI:PR的数学表示-传统方法PR

    前言: 接上一篇:AI:模式识别的数学表示 在图像处理PR领域,相对于ANN方法,其他的方法一般称为传统方法.在结构上,几乎所有的PR方法都是可解释的.且任一传统方法,在一定约束下,可以转换为SV近邻 ...

  9. Dll中的方法向外返回dynamic类型可能会失败

    如果Dll中有某个类的方法返回dynamic实例,并且dynamic对象实际实例为匿名类类型,则Dll的外部使用者可能最终无法正常使用此dynamic对象.当使用此dynamic对象时,可能会遇到x属 ...

  10. layui 下拉框取值

    layui.use('form', function () { var form = layui.form; form.on('select(Status)', function (data) { c ...