`
01jiangwei01
  • 浏览: 543108 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

objective_c

    博客分类:
  • IOS
阅读更多

1
 1.1 @interface指令
 @interface Circle:NSObject  表示这是名为 Circle的新定义的接口
 1.2 -(void)draw;
 前面的短线表明这是Objective-C方法的声明。这是一种区分函数原型与方法声明的方式,函数原型中没有先行短线。短线后面是方法的返回类型,位于圆括号中。Objective-c使用void表示无返回值。
 1.3 中缀符
 Objective-C中有一种名为中缀符的语法技术。方法的名称及参数都是合在一起的。
 例如,可以这样调用带一个参数的方法:[circle setFillColor:kredcolor];
 带两个参数的方法调用如下所示:[textThing setStringValue:@"hello there" color:kBlueBolor];
  setStringValue:和color:实际上是参数的名称(实际上是方法名称的一部分,后面在详细介绍)
  @"hello there"和kBlueBolor是被传递的参数。
 1.4 方法定义时,-(void) setFillColor:(ShapeColor) fillColor;此处方法的名称是setFillColor:,结尾处的冒号是名称的一部分,它告诉编译器和编程人员后面会出现参数。(ShapeColor) fillColor,圆括号中的内容指定参数类型,fillColor是参数名.
 1.5 冒号是方法名称重要非常重要的组成部分.方法 -(void)scratchTheCat;不同于-(void)scratchTheCat:(CatType )critter;在不含有参数的方法结尾处乱填冒号是错误的。面对编译器错误,可能因为某个多余的冒号而不知所措,并希望能解决这样的错误。可以遵循这个规则:如果方法使用参数,则需要冒号;否则不需要冒号。
2
  2.1 @implementation
 @implementation是一个编译器指令,表明你将为某个类提供代码。类名出现在@implementation之后。该行的结尾处没有分号,因为在Objective-C编译器指令后不必使用分号。
   例如: @implementation Circle
3
  3.1 继承语法:@interface Circle:NSObject冒号后面的标识符是需要继承的类。
4
 4.1由于在类的定义中,代码被子人的拆分为借口和实现两部分,所以类的代码通常也被分别放在两个文件里。一个文件存放几口部分的代码:类的@interface指令、公共struct定义、enum常量、#defines和extern全局变量等。头文件名称和类名称相同,只是以.h做后缀。例如:Engine类的头文件会被命名为Engine.h,而Circle类的头文件名称则是Circle.h.
 4.2 所有实现细节都被放在与类同名,但是以.m为后缀的文件中(有时叫做.m文件)。
5
 5.1@property 特性
  5.1.1 @property是一种新的编译器功能,表示声明了一个新的对象的属性。
  5.1.2 @property float rainHandling;语句表明该类的对象具有float类型的属性,其名称为rainHandling。而且还可以通过调用-setRainHanding:来设置属性,通过调用-rainHandling来访问属性。@property 预编译指令的作用是自动声明属性的setter和getter方法。
  5.1.3 @property(copy)NSString *name;通过向name对象添加copy方法,编译器和该类的使用者知道name对象将被复制。
 等价于
 -(void)setName (NSString *)newName{
  [name release];
  name = [newName copy];
 }
  5.1.4 @property(retain)Engine *engine;对engine对象的管理只有保留和释放操作,如果你不曾指定这两种操作中的任何一种,编译器将默认执行赋值操作,而这通常不是你希望对对象执行的操作。
 等价于
 -(boid)setEngine:(Engine *) newEngine
 {
 [newEngine retain];
 [engine release];
 engine = newEngine;
 }
  5.1.5读写属性(默认情况,可省略):
 @property (readwrite,copy)NSString *name;
 @property (readwrite,retain)Engine *engine;
  5.1.6只读属性
 @property (readonly)NSString *name;
 @property (readonly)Engine *engine;
 当知道@property是只读特性时,编译器将只为该属性生成一个getter方法而不是setter方法。当我们此时调用setter方法时,编译器会报错,点操作符也会报错。
  5.1.7 特性不是万能的。特性只支持替代-setBlash和-blah方法,但是不支持那些需要接受额外参数的方法,例如:-(void) setTire:(Tire *) tire atIndex:(int)index;
6
 6.1@synthesize也是一种新的编译器功能,表示"创建该属性的访问器"。当遇到代码@systhesize rainHandling;时,编译器自动输出-setRainHandling:和-rainHandling方法的已编译代码。@synthesize预编译指令不同与代码生成,我们永远看不到实现-setRainHandling:和-rainHandling的代码,但是这些方法确实存在,并可以被调用。
 6.2@synthesize name = appellation;
 有时候我们希望实例变量有一个名称,而公开的属性name具有另一个名称。例如,希望使用其他名称(ruappellation)调用Car类中的实例变量name,则修改Car.h中该实例变量的名称。
 @interface Car:NSObject{
  NSString appellation;
  NSMutableArray tires;
  Engine engine;
 }
 @synthesize name = appellation;编译器将创建-setName和-name方法,但在其实现中却使用实例变量appellation.
7 类别是一种为现有的类添加新方法的方式。想为一个类添加新的方法,包括那些没有源代码的类。
 7.1 类别的声明格式为
 @interface NSString(NumberConvenience)
 该声明有两个特点。首先,现有的类位于@interface关键字之后,其后是位于圆括号中的一个新名称。该声明表示,类别的名称是NumberConvenience,而且该类别将向NSString类中添加方法。只要保证类别名称的唯一性,你可以向一个类中添加任意多的类别。
 其次,你可以指定希望向其添加类别的类(本例中是NSString)以及类别的名称(本列中是NumberConvenience),而且你还可以类处添加的方法,最后以@end结束。
 由于不能添加新实现变量,因此与类的声明不同的是,类别的声明中没有实例变量部分。
 7.2 实现类别
 @implementation NSString(NumberConvenience)
 与上面相似,这里也包含类名、类别名以及新方法的正文部分。
  7.3 类别的局限性
 第一,无法向类中添加新的实例变量,类别没有位置容纳实例变量。
 第二,名称冲突,类别中的方法与现有的方法重名时,类别具有更高的优先级。
8 协议
 正式协议是一个命名的方法列表。与非正式协议不同的是,正式协议要求显示的采用协议。采用协议的办法是在类的@interface声明中列出协议的名称.采用协议意味着你承诺时限该协议的所有方法,否则编译器生成警告来提醒你。
  8.1 声明协议:
 @protocol NSCopying
  -(id) copyWIthZone:(NSZone*) zone;
 @end
   8.1.1 协议名称必须唯一。
  8.2 采用协议,在类的声明中列出该协议的名称,并用尖括号将协议名称括起来。例如,在Car类中采用NSCopying协议,则其类声明像下面这样:
 @interface Car:NSObject<NSCopying>
 {
  //instance variables
 }
 //methods
 @end
 而如果Car类要同时采用NSCopying和NSCoding这两个协议,则其声明如下:
 @interface Car  :NSObject<NSCopying,NSCoding>
9
  9.1
   id类型表示一个可以指向任何类型的对象的指针,他是一个泛型对象类型。可以将任何对象赋值给一个id类型的变量,也可以将一个id类型的变量赋值给任何类型的对象指针。如果一个用尖括号括起来的协议名称跟随在id之后,则编译器将知道你期望任意类型的对象,只要遵守该协议。
 例如:NSControl类中有一个名为setObjectValue:的方法,该方法要求对象遵守NSCopying协议:
 -(void) setObjectValue:(id<NSCopying>)obj
  9.2 Objective-C 2.0 增加了两个新的协议修饰符:@optional和@required.现在可以这样编写代码
 @protocol BaseballPlayer
  -(void)drawHugeSalary;
 @optional
  -(void)slideHome;
  -(void)catchBall;
  -(void)throwBall;
 @required
  -(void)swingBat;
 @end
  

分享到:
评论

相关推荐

    effictive_Objective_C_2.0.pdf

    effictive_Objective_C_2.0.pdf

    Objective_C基础教程

    Objective_C是iOS开发的基础,学会了Objective_C再去学习swif也将是易如反掌

    Objective_c语法

    Objective_c语法html版,简单易懂

    objective_c_primer

    很好的objective_c快速入门教程,挺短的,很容易看完,培养iOS开发的兴趣吧。

    programming_in_objective_c

    这本书详细介绍了Objective-C语言的基础和高级特性,是深入理解Objective-C编程的基石。 Objective-C是一种强大的面向对象的编程语言,它是苹果的iOS和macOS操作系统开发的核心语言。在本书中,作者首先引导读者...

    笔记_Objective_c基础教程.pdf

    笔记_Objective_c基础教程

    Objective_C基础教程最新版(非扫描版)

    Objective_C基础教程最新版(非扫描版)

    深度解析Objective_C_笔试题

    Objective-C 是苹果公司开发的一种面向对象的编程语言,主要用于iOS和macOS的应用程序开发。本文将深度解析一些Objective-C笔试题中的关键知识点,帮助你更好地理解和掌握这门语言。 1. **内存管理**: - `alloc` ...

    objective_c_tutorial

    Objective-C是一门通用的面向对象编程语言,它将Smalltalk风格的消息传递机制添加到了C语言中。这门语言是苹果公司用于OS X和iOS操作系统以及它们的API(Cocoa和Cocoa Touch)的主要编程语言。Objective-C编程语言的...

    objective_C基础入门

    - Objective-C是一种通用、面向对象的编程语言,由Mesa Programming Language衍生而来,它向C语言添加了面向对象的能力,是开发iOS和macOS应用的主要语言之一。 - **Cocoa框架**: - 苹果公司提供了多个框架集来...

    3des.rar_3des_3des objective_3des objective-c_c 3des_objective

    标签中的"3des 3des_objective 3des_objective-c c___3des objective_3des"进一步确认了这包内容与3DES算法以及Objective-C语言的实现有关。Objective-C是Apple的开发语言,主要用于iOS和macOS平台的应用程序开发。...

    objective_c.pdf

    从给定的文件信息来看,我们正在探讨的是《Objective-C编程》这本书的第三版,作者是Stephen G. Kochan。本书作为Developer’s Library系列的一部分,旨在为专业程序员提供高质量的参考和教程,聚焦于他们在日常工作...

    Objective_C 2.0 程序设计.pdf

    作者强调,学习Objective-C之前并不需要完全掌握C语言,因为C语言中的很多过程性语言特性在使用Objective-C时是不必要的,尤其对于初学者。Objective-C本身只是C语言的扩展,并不意味着必须首先学习C语言。 #### ...

    Objective_c程序设计

    Objective-C是一种面向对象的编程语言,它是C语言的一个超集,广泛用于iOS和Mac OS X应用的开发。本文将基于提供的文件信息,对Objective-C程序设计的相关知识点进行详细说明。 首先,本书名为《Objective-C程序...

    学习欧阳坚Objective_C随笔

    Objective-C是一种面向对象的编程语言,它是在C语言的基础上扩展的,主要应用于Apple的iOS和macOS操作系统。本文将深入探讨Objective-C的关键概念,包括它的语法特性、对象模型以及消息传递机制。 首先,Objective-...

    objective_c入门_3

    objective c 入门_3,没有比ppt更有内涵的了

Global site tag (gtag.js) - Google Analytics