我本来想翻译一下的,但是看到网上以及有一些翻译的,所以就直接转载了.
原贴地址:http://www.i-alive.com/post/45/
英文版地址:https://developer.apple.com/library/ios/#referencelibrary/GettingStarted/Learning_Objective-C_A_Primer/_index.html#//apple_ref/doc/uid/TP40007594
Objective-C是C语言的一个超集,也就是说,它支持基本的C语言的语法。
类的定义和实现是分别放在头文件和源文件中的。头文件的扩展名是.h;源文件是.m;还有一种.mm是用来放C++代码的。
Classes(类)
Objective-C类的定义分为声明和实现两部分:
interface部分包含类的声明,实例变量定义,以类相关的方法。interface通常都在.h文件中;
代码实现部分包含类方法的代码,这部分放在.m文件中。
下图给出了类声明的语法。

类MyClass继承了基类NSObject。
类的声明以@interface开始,后面跟着类名及继承的基类;声明以@end结束。
类的实例变量(或者叫成员变量)放在大括号中({ & });
类的方法在大括号外面声明。
每行语句是以分号(;)来结尾的。
objective-c同时支持强类型和弱类型,强类型就不用说了,弱类型的话,是用“id”来声明,用这个声明的变量,什么都能装,大概就是这个意思。
Methods and Messaging(方法与消息)
Methods:
objective-c的类可以声明两种方法:类方法和实例方法。
实例方法就是只有声明实例后才能调用,声明的时候用“-”;
类方法就像静态方法一样,直接用类就能调用,声明的时候用“+”。
下图为方法声明语法:

Message:
叫这个message我总觉得怪怪的,怎么翻译都觉得别扭。算了,不纠结了,直接说吧。
调用一个方法的方式,就是发对象消息(messaging an object)。message就是方法签名。所有发送给对象的message都是动态调用的,这也是objective-c实现多态的方法。
[myArray insertObject:anObject atIndex:0];
由上面的示例可以看到,一次调用,一个message是用一堆中括号([ & ])来包起来的。在中括号内,接收message的对象在左边( myArray ),message在右边( 也就是insterObject:anObject atIndex:0 )。
message也可以嵌套,比如参数可以是一个message,比如,message执行的结果可以传给参数,或把message作为接收方,就行下面这行代码一样,这样代码也会比较简洁。
[[myAppObject theArray] insertObject:[myAppObject objectToInsert] atIndex:0];
Objective-C用“.”操作符来操作访问方法( accessor methods ),用来获取或设置对象状态。访问方法的形式一般来说就是 :
-(type) prropertyName //读取
-(void) setPropertyName:(type) //设置
下面是示例代码:
//在消息中用“.”操作符调用访问方法
[myAppObject.theArray insertObject:[myAppObject objectToInsert] atIndex:0];
//赋值时的"."操作符调用访问方法
myAppObject.theArray = aNewArray;
类方法的实现示例:
@implementation MyClass
- (id)initWithString:(NSString *)aName
{
self = [super init];
if (self) {
name = [aName copy];
}
return self;
}
+ (MyClass *)createMyClassWithString: (NSString *)aName
{
return [[[self alloc] initWithString:aName] autorelease];
}
@end
note:在objective-C中 nil 相当于 null。比如:NSMutableArray *myArray = nill。
Declared Properties(属性)
声明属性要比声明访问方法简单方便的多。
属性的声明是和方法的声明放在一块儿的,用“@property”来定义。
你一可以对属性做一些设定,比如只读或是读取时copy对象什么的,如下:
@property BOOL flag;
@property (copy) NSString *nameObject; // Copy the object during assignment.
@property (readonly) UIView *rootView; // Declare only a getter method.
每一个可读的属性,会自动设定一个同名的方法,用来读取;
每一个可写的属性,会自动设定一个setPropertyName形式的方法,以set开头,后面跟开头字母大写的属性名。
在类的实现部分,你可以用“@synthesize”来指示编译器生成属性相应的方法。
可以用两种方式声明:
@synthesize flag;
@synthesize nameObject;
@synthesize rootView;
@synthesize flag, nameObject, rootView;
一般来说,属性减少了很多代码量。因为用访问方法实现的话,做的事情也差不多,而其还有写一堆实现代码。用@property来声明,再用@synthesize在编译的时候生成获取及设置方法,明显要简单一些。
strings(字符串)
作为C的超集,它支持C风格的字符串。但一般来说不会用C风格的字符串。
字符串会作为类NSStrings的对象来传送。
用类NSStrings来包装字符串有很多好处,比如可以使用一些内建的方法来处理字符串,比如按长度排序,支持unicode,以及printf风格的格式化等等。
因为字符串经常被用到,所以,objective-c提供了一种简写方式来建立NSString对象。
如下所示(用@):
NSString *myString = @"My String\n";
NSString *anotherString = [NSString stringWithFormat:@"%d %@", 1, @"String"];
// Create an Objective-C string from a C string
NSString *fromCString = [NSString stringWithCString:"A C string"
encoding:NSASCIIStringEncoding];
protocols(协议)
protocols按我的理解应该跟C#里的接口差不多意思:
- 可以被任何类实现;
- 只定义接口,没有实现,没有实例变量,实现部分交给继承的类;
- 常常用来指定委托对象的接口;
- 声明方式:
@interface MyClass : NSObject {
}
@end
通过下面的代码理解一下协议,委托及其他对象直接的关系:
@protocol MyProtocol
- (void)myProtocolMethod;
@end
假设有个UIAplication类实现了某个应用的一些方法;如果想接收这个应用的一些通知,我们不用继承这个UIAplication类来实现,该类通过调用方法,将通知发给委托对象。另一个实现了委托协议(UIAplicationDelegate protocol)方法的对象,会接收通知,并提供一个合适的回应信息。
要实现一个接口,只要用“<>”抱住协议名称,放在继承类后面就可以了,类的声明部分不需要对协议方法再次声明。
分享到:
相关推荐
《Learning Objective-C 2.0》第二版是一本全面而实用的Objective-C教程,不仅适合初学者,也适用于有一定编程经验的开发者。通过对C语言基础的巩固、面向对象编程的理解以及Objective-C语言特性的深入学习,读者...
这本书是开发者入门或进阶Objective-C的理想资源,通过它,你可以了解并掌握构建高质量Apple应用的基础。 首先,Objective-C是C语言的超集,这意味着它包含了C语言的所有特性,并在其基础上添加了面向对象的编程...
- **书籍**:《Learning Objective-C On The Mac》是一本非常受欢迎的Objective-C入门书籍,适合初学者。书中详细介绍了Objective-C的基础概念、高级特性和实际应用案例。 - **在线课程**:网络上有许多免费和付费的...
### 学习Objective-C入门指南 #### 一、Objective-C简介 Objective-C是一种简单而功能强大的计算机编程语言,主要用于开发苹果公司的iOS和macOS平台的应用程序。作为一种面向对象的编程语言,Objective-C是在C语言...
专业开发者和教育工作者对本书给予了高度评价,认为它是学习Objective-C的理想入门书籍。Scott D. Yelich,一位移动应用开发者,赞扬本书既全面又实用,能够快速帮助读者建立对Objective-C的全面理解。Joseph E. ...
《Learning Objective-C 2.0》是一本非常适合初学者和有一定编程经验的开发者深入了解 Objective-C 语言的书籍。它不仅涵盖了语言的基础知识,还提供了大量的实践案例和深入的技术解析,能够帮助读者建立起对 ...
接下来是两本电子书:“[iPhone和iPad开发书籍大全].Learning.ObjectiveC.2.0(Addison.Wesley.2010-07).pdf”和“Objective-C+入门指南.pdf”。这两本书都是Objective-C学习的重要参考资料。《Learning Objective-C ...
《Beginning.iPhone.SDK.Programming.with.Objective-C》这本书是针对想要学习如何使用Objective-C开发iPhone应用程序的初学者的入门书籍。书中详细地介绍了Apple iPhone SDK的基础知识,并通过实例驱动的方式提供了...
《Addison.Wesley.Learning.ObjectiveC.2.0.Jul.2010》这本书是Objective-C编程语言的学习指南,由Addison-Wesley出版社于2010年7月出版。Objective-C是苹果公司开发的面向对象的编程语言,主要用于iOS和macOS的应用...
入门 如果您没有,请一个 注册一个 为教科书工作设置 git 存储库(最好是公开的) 设置您的 git 存储库 (这些是设置公共存储库的说明,推荐) 在自己的github账号下创建这个仓库的fork(按钮当前在页面右上角) ...
Swift编程入门(Learning Swift-Andrew J Wagner, 2nd Edition)-2016年Apress原版,0积分—— Swift,苹果于2014年WWDC(苹果开发者大会)发布的新开发语言,可与Objective-C*共同运行于Mac OS和iOS平台,用于搭建...
在学习Objective-C时,推荐书籍和资源有《Programming in Objective-C 2.0》、《Learning Objective-C 2.0》等,这些书籍可以帮助快速入门,并深入理解Objective-C的特性。同时,对于Objective-C的内存管理,特别是...
Objective-C是C语言的超集,添加了Smalltalk风格的消息传递机制,使得它特别适合构建面向对象的应用程序。书中会讲解Objective-C的基本语法、类和对象的概念,以及如何创建和管理实例。 本书还会深入探讨iOS SDK...
【Learning iOS】是一本专为英语用户设计的iOS开发学习教材。它涵盖了从入门到进阶的各种主题,帮助开发者深入理解iOS平台的开发技术。以下是根据书中的内容提炼出的一些关键知识点: 1. **创建默认的Single View ...