Objective-C的基础语法总结

1.NSLog(@“hello world!”);//打印语句的函数,需要打印的字符串放在@之后。

NSLog(@“are %d and %d different?%@”,4,4,@”YES”);

2.方括号有两个作用:

1)访问数组元素

2)用于通知某个对象执行什么,在方括号内第一项是对象,其余部分是需要对象执行的操作。例如,[shape draw]的含义为通知shape执行draw方法。

3.方法调用:类名 方法名:参数

注意:如果方法使用参数,则需要冒号;否则不需要冒号。

4.类的编写:

头文件中:@interface name

….//声明方法

@end

实现中:@implementation name     注意:此行没有逗号

….//代码实现,其顺序可以不与头文件声明的顺序一致;

.....//另外,也可以定义那些头文件中未声明的方法,可以把它们当做私有方法,仅在类的 .....//实现中使用

@end

5.OC的方法实现时要注意调用的先后顺序:

例如A方法中需要调用B方法,则B方法需要在A方法之前实现。

6.实例化对象

7.C++具有多继承特性,但Objective-C不支持多继承,继承是指两个类之间的关系,避免出现很多重复代码。

8.OC继承知识:

当子类中重写父类方法并调用此方法时,会完全忽略父类中该方法的实现,为了避免忽略父类方法,可以通过super关键字,此时调用子类的重写方法时仍然会调用父类的实现方法。

9.复合是通过包含作为实力变量的对象指针实现的,严格来讲,只有对象间的组合才称为复合。

[email protected]创建一个前向引用,就是在告诉编译器:“相信我,以后你会知道这个类到底是什么,但是现在,你只需要知道这些”。

如果有循环依赖关系,@class也很有用。即A类使用B类,B类也使用A类。如果试图通过#import语句将这两个类互相引用,那么最后就会出现编译错误。但是如果在A.h中使用@class B,在B.h中使用@class A,那么这两个类就可以互相引用了。

11.集合框架NSArray有两个限制(NSArray是不可变对象的数组):

(1)只能存储Objective-C的对象,不能存储C语言中的基本数据类型,如int,float,struct,enum等。(2)不能再NSArray中存储nil。

**  创建NSArray对象:arrayWithObjects:…,....,...,....nil;发送一个以逗号分隔的对象列表,在列表结尾添加nil代表列表结束。例如,NSArray * array;

array = [NSArray arrayWithObjects:@“one”,@“two”,@“three”,nil];

** 获取指定索引的对象方法objectAtIndex:

** 将字符串切分为NSArray对象的方法componentsSeparatedByString:();

12.可变数组NSMutableArray,可以随意的添加和删除元素,但数组本身一直是不变的。

** 创建可变数组对象NSMutableArray arrayWithCapacity:3;

** 调用-(void)addObject:(id)anObject;在数组末尾添加对象。

** 调用-(void)removeObjectAtIndex:(unsigned)index;//删除指定索引处的对象。当删除相对靠前索引处的元素时后面的数组元素都被前移来填补空缺。

** 遍历数组时还可以通过NSEnumerator实现,具体代码如下:

//通过NSEnumerator遍历数组

NSEnumerator* enumerator;

enumerator = [tArray objectEnumerator];

id thingid;

while (thingid = [enumerator nextObject]) {

NSLog(@"I found %@",thingid);

}

**快速枚举:

//快速枚举

for(NSString * tmp in tArray){

NSLog(@"I found %@",tmp);

}

13.集合框架NSDictionary:(121页)

类似Java中的map,使用的是键查询的优化存储方式,跟NSString,NSArray一样是不可变的对象。

14.NSArray和NSDictionary只能存储对象,不能存储基本类型数据,因此OC中提供了NSNumber类用来包装基本类型数据(即以对象形式实现)。

+(NSNumber*) numberWithChar:(char)value;

+(NSNumber*) numberWithInt:(int)value;

+(NSNumber*) numberWithFloat:(float)value;

+(NSNumber*) numberWithBool:(BOOL)value;

通常将一个基本类型的数据包装成对象叫做装箱,从对象中提出基本类型的数据叫做取消装箱。OC不支持自动装箱。

15.NSSortDescriptor对象进行数组排序

===========内存管理规则:如果使用new,alloc,或copy方法获得一个对象,则该对象的保留计数器的值为1,而且要负责释放它========================================

16.简化接口

@property预编译指令的作用是自动声明属性的setter和getter方法。

例如:以往我们的一对方法如下所示:

@interface car{

float engine;

}

-(void)setEngine;//设置方法

-(id)engine;//获取对象方法

@end

现在可以用更具有特性的写法实现,具体如下:

@interface car{

float engine;

}

@property float engine;//代替了上面的setEngine和engine方法,用在头文件中

@end

17.简化实现

@synthesize engine;//是一种新的编译器功能,表示“创建该属性的访问器”,当遇到代码@synthesize engine;时,编译器将输出setEngine和engine方法的已编译的代码。

***@ property特性只支持上面提到的那种方式,不支持那些需要接收额外参数的方法。

18.只读性:@property特新默认是可读写的,但是比如驾驶证号码或身份证号码这类特性,我们不希望任何人更改它,我们可以使用@property的只读属性。例如:

@property (readonly) float shoeSize;

编译器将只为该属性生成一个getter方法而不生成setter方法。

19.类别是一种为现有的类(例如类库等)添加新方法的方式。类别还提供了将对象的实现分散到多个不同的源文件、甚至多个不同的框架中的方法。

** 类别的声明格式与类的声明格式类似:

@interface NSString (NumberConvenience)

-(NSNumber*) lengthAsNumber;

@end

上述代码的含义是,类别的名称是NumberConvenience,而且该类别将向NSString类中添加方法。即向NSString类中添加一个名称为NumberConvenience的类别。只要保证类别名称的唯一性,可以向一个类中添加任意多的类别。另外,类别中不能声明实例变量。

** 类别实现

在@implementation部分实现自己的方法

@ implementation NSString (NumberConvenience)

-(NSNumber*) lengthAsNumber{

//实现代码。。。

}

@end

类别的局限性:1.不能添加新的实例变量;2.名称冲突,即类别中的方法与现有的方法重名。当发生名称冲突时,类别具有更高的优先级。

20.委托(不太懂),方法的选择器

利用类别可以声明非正式协议。非正式协议是NSObject的一个类别,它可以列出对象能够相应的方法。非正式协议用于实现委托,委托是一种允许你轻松定制对象行为的技术。

选择器是一种在代码中指定特定的Objective-C消息的方法。

21.正式协议

*)下面介绍协议的声明

@protocol NSCopying

-(id)copyWithZone:(NSZone*) zone;

@end

注意协议的声明时,协议名称必须唯一,协议的每一个采用者都必须实现这些方法,使用协议不引入新的实例变量。

*)采用协议

@interface Car:NSObject <NSCopying,NSCoding>{//采用了两个协议

//实例变量

}

//方法声明

@end

注意###:协议名称是使用尖括号括起来的,当采用多个协议时,可以按任意顺序列出,没有先后顺序的影响。

22.复制(copy)分为浅层复制(shadow copy)和深层复制(deep copy)。

浅层复制:不复制引用对象,新复制的对象只只想现有的引用对象。NSArray类的copy方法是浅层复制,当复制一个NSArray类的对象时,你复制的对象只复制指向引用对象的指针,而不复制引用对象本身。如果复制一个NSArray类的对象,该对象包含5个NSString类的对象,则你最终得到的是5个可供程序使用的字符串对象,而不是10个字符串对象。

深层复制:将复制所有的引用对象。如果NSArray类的copy方法是深层复制,则在复制操作完成后得到10个可用的字符串对象。

时间: 2024-11-16 18:47:13

Objective-C的基础语法总结的相关文章

Objective C Foundation基础框架[转]

<pre class="cpp" name="code">iOS Foundation基础框架就是以Foundation.h头文件的库 #import <Foundation/Foundation.h> Mac OS X和iOS都使用了Foundation基础框架.该框架中有很多日后开发常用的API,非常基础重要.以下就常用的类和结构做个介绍. NSObjct NSObject类,是ObjC类族中的根类.NSObject有一些高级特性支持,在

Java基础语法

Java的基础语法中包含字符集.标识符和关键字.变量和常量.语句.注释.运算符和表达式这些基本要素. 一.关键字 编程语言都有一些保留的单词,用于定义该语言,这些单词对于编译器有特殊含义,不能作为标识符使用: Java中的true.false.null这三个保留字,不能作为标识符使用,对于编译器有特殊含义: main是一个用于描述Java程序开始方法的特殊名称,它不是一个关键字: abstract 抽象 boolean 逻辑运算: 布尔 break 打破: 断开 byte 字节: case 例,

关于JS脚本语言的基础语法

JS脚本语言的基础语法:输出语法  alert("警告!");  confirm("确定吗?");   prompt("请输入密码");为弱类型语言: 开始时要嵌入JS代码:<script type="text/javascript"></script>: 关于写程序是需注意的基本语法:1.所有的字符全都是英文半角的:2.大部分情况下每条语句结束后要加分号:3.每一块代码结束后加换行:4.程序前呼后应:

前端学PHP之正则表达式基础语法

前面的话 正则表达式是用于描述字符排列和匹配模式的一种语法规则.它主要用于字符串的模式分割.匹配.查找及替换操作.在PHP中,正则表达式一般是由正规字符和一些特殊字符(类似于通配符)联合构成的一个文本模式的程序性描述.正则表达式有三个作用:1.匹配,也常常用于从字符串中析取信息:2.用新文本代替匹配文本:3.将一个字符串拆分为一组更小的信息块.本文将详细介绍PHP中的正则表达式基础语法 [注意]关于javascript的正则表达式的详细信息移步至此 历史 在PHP中有两套正则表达式函数库,两者功

java 基础语法

第一周接触java基础语法,上课听得头痛,还是半懂不懂,放学后讲的啥子都忘了. 这是老师给的周末作业: 1.输入长与宽计算长方形面积与周长.(用精度类型计算)2.输入一个学生三科成绩,计算平均分.3.输入int型市场价格,购买价格,计算差额,差额显示为单精度浮点型.4.42页第二,计算房贷那道题.5.输入一个学生成绩,学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示.6.题目:输入三个整数x,y,z,请把这三个数由小到大输出.程序分析:我们想办法把最小的数放到x

jQuery安装和基础语法

1.安装 从 jquery.com 下载 jQuery 库 <script src="jquery-1.10.2.min.js"></script> 从 CDN 中载入 jQuery <script src="http://libs.baidu.com/jquery/1.10.2/jquery.min.js"></script> 许多用户在访问其他站点时,已经从百度.又拍云.新浪.谷歌或微软加载过 jQuery.所有结

javascript基础语法——词法结构

× 目录 [1]java [2]定义 [3]大小写[4]保留字[5]注释[6]空白[7]分号 前面的话 javascript是一门简单的语言,也是一门复杂的语言.说它简单,是因为学会使用它只需片刻功夫:而说它复杂,是因为要真正掌握它则需要数年时间.实际上,前端工程师很大程度上就是指javascript工程师.前端入门容易精通难,说的是前端,更指的是javascript.本文是javascript基础语法的第一篇——词法结构 与java关系 关于javascript有这样一个说法,java和jav

【MOOC笔记】JSP基础语法

JSP 全名:Java Server Pages.java服务器端页面. 本质上是一个简化的Servlet设计,实现了在java中使用HTML标签. JSP是一种动态网站开发标准,与Servlet一样,在服务器端执行. 常用动态网站开发技术: JSP:JAVA平台,安全性高,适合开发大型.企业级WEB应用程序. ASP.NET:基于可视化组件开发,安全性.跨平台性差,最好用微软配套系统. PHP:适合中小型企业WEB应用开发,黄金开发组合:Linux+Apache+MySQL+PHP JSP基础

IOS_OC_基础语法

1.YES与NO Object-c 提供了 BOOL 类型, 但这个BOOL 类型和 C++里的并不一样: 在C++里一切非 0 值的东西都 为 true,而为 0 值的为 false.但是 Object-c 里 1 为 true 并被宏定义为 YES=1,0 为 false 并被宏定义为 NO=0. + (BOOL)isEquals:(int)x with:(int)y { return x - y; } if ([Provider isEquals:10 with:1021]) {// ==

less以及SCSS基础语法

less 1.注释: //这种注释不能够编译到CSS 文件中 /*这种注释 能够编译到CSS 文件中*/ 2.less 的基础语法 (1).声明变量: @变量名 : 变量值 使用变量: @变量名 >>>变量使用的基本原则: 多次频繁出现的值,后期需要统一修改的值,牵扯到数值运算的值,推荐使用变量 >>>less 中的变量类型 ①数值类: 不带单位的 123, 带单位的 1px ②字符串类型: 不带引号的 red #FF0000 带引号的"hahhaha&quo