文件类型说明:
.h     头文件,用于定义类、实例变量及类中的方法等定义信息(interface)。
.m    源文件,定义方法体,可实现objce-c和c方法(implementation)。
.mm   c++源文件

引用头文件:
可通过#import关键字引入想要使用的头文件,该关键字作用通#include相同,不过import会确保每个文件只会被引用一次。

object-c中类的定义有两部分:interface和implementation
interface部分包含类的定义以及实例变量和方法。interfache通常定义在.h(头)文件中;
implementation部分包含方法的实现部分(方法体),implementation通常定义在.m(源)文件中。

 @interface MyClass : NSObject
{
int count;
id data;
NSString* name;
}
-(id)initWithString:(NSString*)aName;
+(MyClass*)createMyClassWithString:(NSString*)aName;
@end

在上述代码中,包含了以下信息:
名为MyClass的类,继承于Cocoa框架中的NSObject类;
定义了3个成员变量:count、data和name(@protected)
以及声明了2个方法

实例变量也可以放到源文件中定义,如:

 // 源文件中的:NSObject为可选,一般情况下不用写
@implenmentation MyClass :NSObject
{
int count;
int data;
NSString *name;
} -(id)initWithString:(NSString*)aName
{
...
}

但需要注意的是,若成员变量定义在源文件中而非头文件中,则变量的访问权限都为@private.

object-c支持强类型和弱类型两种方式定义一个对象变量:
    强类型定义时变量类型即类命,且为指针类型
    弱类型定义使用id型定义

 MyClass *myObject;    // 强类型定义
id myObject; //弱类型定义

方法的定义和引用:
Object-C中的方法同其它面向对象语言一样,分两种方法:实例方法(-)和类方法(+)(静态方法)。
实例方法需要通过类的实例去调用,而静态方法可直接通过类名去调用。

 - (void)insertObject:(id)anObject atIndex:(NSUInter)index;

上述代码中定义了一个名为"insertObject:atIndex"的实例方法,该方法无返回值,并定义了2个形参,类型分别为id和NSUInter。

在定义一个方法时,也可以不指定参数名,如:

 // 声明一个没有参数名的方法
-(int) set: (int) n: (int) d; // 方法调用
[object set : : ];

方法的调用:
在Object-C中,调用一个方法叫做发送消息,方法调用语句定义在中括号"[]"中:

 [myArray insertObject:anObject atIndex:];

为了避免生成大量的临时变量,Object-C允许嵌套调用方法,使一个方法的返回值当作另一个方法的参数,如:

 [[myAppObject theArray] inserObject:[myAppObject objectToInsert] atIndex:];

成员变量:
默认情况下,Object-C中的成员变量为@protected,可通过@public,@private关键字修改成员变量的可见性(只有成员变量拥有这些属性)。

 @interface MyObject : NSObject
{
// 成员变量要定义在大括号中
@public int n1;
@private int n2;
@protected int n3;
}
......
@end // 通过类实例访问public的成员变量:
MyObject *mo = [[MyObject alloc] init];
mo->n1;

若要访问受保护的成员变量,需要在类中定义相应的get和set方法,通过类实例调用这些方法来达到访问或设置这些成员变量的目的。

访问器 :
在Object-C中,提供了@property和@synthesize两个关键字,通过这两个关键字,可以高效的为每个指定的成员变量设定set方法和get方法,称为属性

 // 头文件
@interface MyObject : NSObject
{
@property int n1, n2;
}
...
@end // 源码文件
@implementation MyObject @synthesize n1, n2;
...
@end 

在上述代码中,Object-C会自动创建4个方法:n1、n2、setN1和setN2。
可通过对象实例直接调用这4个方法

MyObject *mo = [[MyObject alloc] init];
int l_n1, l_n2;
[mo setN1:];
[mo setN2:];
l_n1 = [mo n1];
l_n2 = [mo n2];

Object-C也支持使用"."符号来访问properties

 mo.n1 = ;

这种方式同样适用于调用方法

变量范围

Object-C中的变量范围同C一样,在{}中定义的变量属于本地变量,只能在{}中使用,本地变量默认初始化值为nil。同样方法的传值方式是传值引用,但当传递对象时是地址引用。
Object-C中也支持静态变量,通过static关键字,如:

 static int n = ;

静态变量默认初始值为0,同C一样。注:静态变量同样只能在定义的范围内使用。

self变量相当于java中的this。

继承

Ojbect-C中的继承同java相同,都是单一继承关系,要继承一个类,可写作:

 @interface ClassA : NSObject

 @end

其中NSObject类是最顶层类,一般所有类的最终父类都是它。

在子类中可以访问父类中的非private变量的实例变量和方法(静态方法和实例方法)。
注:只能访问非private属性的成员变量,说明该变量必须定义在interface中(类的声明中),因为在implementation中声明的成员变量全部都是private。

在子类中通过super访问父类中的方法,如:

 [super init];

NSObject类常用方法:

方法名 说明

-(BOOL) isKindOfClass: class-object

Is the object a member of class-object or a descendant?

-(BOOL) isMemberOfClass: class-object

Is the object a member of class-object?

-(BOOL) respondsToSelector: selector

Can the object respond to the method specified by selector?

+(BOOL) instancesRespondToSelector: selector

Can instances of the specified class respond to selector?

+(BOOL)isSubclassOfClass: class-object

Is the object a subclass of the specified class?

-(id) performSelector: selector

Apply the method specified by selector.

(id) performSelector: selector withObject: object

Apply the method specified by selector passing the argument object.

-(id) performSelector: selector withObject: object1 withObject: object2

Apply the method specified by selector with the arguments object1 and object2.

class-object是一个类对象,通过class方法生成,可通过类名和实例名调用class方法生成,如:

 [Square class]; // Square 是一个类名
[mySquare class]; // mySquare 是一个实例 // 验证两个实例是否属于同一个类
if ([obj1 class] == [obj2 class])
{
...
} // 验证myFan是否属于Fraction,即是否是Fraction的实例
[myFan isMemberOfClass: [Fraction class]] 

selector是一个SEL类型的变量(C中的函数指针),直接通过@selector生成 ,如:

// 为alloc方法生成一个SEL类型变量
@selector (alloc) @selector (setTo:over:) // 查看Fraction类中是否含有setTo:over方法
// 该方法也去父类中查找
[Fraction instancesRespondToSelector: @selector(setTo:over)];

通过performSelector动态调用函数:

 @implementation Fraction
-(void) setTO:(int) a Over:(int)b
{
...
}
-(void) print
{
// 通过performSelector方法调用setTo:Over
// 传递2个整数参数4和5
[self performSelector:@selector(setTo:Over) withObject: withObject:]
}
@end
 if ([graphicObject respondsToSelector: action] == YES)
[graphicObject performSelector: action]
else
// error handling code here

异常

使用@try和@catch捕获异常:

 @try
{
...
} @catch(NSException *exception)
{
...
}
// 可选的放置一个@finally,该语句无论是否有异常发生,都会执行

编写类的构造函数

可为一个类编写多个不同的初始化函数,实例化类时通过指定不同的初始化函数执行不同的初始化操作

 -(Fraction *) initWith: (int) n over: (int) d {
self = [super init];
if (self)
[self setTo: n over: d];
return self;
}

重写init方法

 /*
* 注,该方法应该返回id类型,
* 而不是指定的类的类型
* 如果其它类继承自该类,初始化子类时候返回的类型就会不正确
*/ -(id) init
{
return [self initWith: over:];
}

在类外部定义的变量会成为全局变量,在任何类和方法中(包括其它文件)中都可以访问这个变量。

关键字extern可用来在类和方法内部访问全局变量,同PHP的global类似,但切记:
extern是声明,而不是定义。
在变量前使用extern关键字,并不会为该变量分配内存,仅仅是将该变量标识为全局变量,所以不可以在使用extern定义变量时赋值。

枚举

Object-C支持枚举类型,格式为:

 // 定义枚举
enum flag { false, true }; // 声明两个枚举变量,该枚举变量的值只能是true或false
enum flag endOfData, matchFound; // 定义枚举
enum direction { up, down, left = , right }; // 或
enum boolean { no = , false = , yes = , true = };

Object c 基础知识的更多相关文章

  1. Object -c基础知识(5)--release 之后 retainCount为何为1

    在XCode中加入如下代码:  UILabel *label=[UILabel alloc]; [label setText:@"TestLabel"]; NSLog(@" ...

  2. 第二十九节:Java基础知识-类,多态,Object,数组和字符串

    前言 Java基础知识-类,多态,Object,数组和字符串,回顾,继承,类的多态性,多态,向上转型和向下转型,Object,数组,多维数组,字符串,字符串比较. 回顾 类的定义格式: [类的修饰符] ...

  3. Object c 基础知识

    文件类型说明:.h 头文件,用于定义类.实例变量及类中的方法等定义信息(interface). .m 源文件,定义方法体,可实现objce-c和c方法(implementation). .mm c++ ...

  4. .NET面试题系列[1] - .NET框架基础知识(1)

    很明显,CLS是CTS的一个子集,而且是最小的子集. - 张子阳 .NET框架基础知识(1) 参考资料: http://www.tracefact.net/CLR-and-Framework/DotN ...

  5. 【干货】用大白话聊聊JavaSE — ArrayList 深入剖析和Java基础知识详解(二)

    在上一节中,我们简单阐述了Java的一些基础知识,比如多态,接口的实现等. 然后,演示了ArrayList的几个基本方法. ArrayList是一个集合框架,它的底层其实就是一个数组,这一点,官方文档 ...

  6. Python开发【第二篇】:Python基础知识

    Python基础知识 一.初识基本数据类型 类型: int(整型) 在32位机器上,整数的位数为32位,取值范围为-2**31-2**31-1,即-2147483648-2147483647 在64位 ...

  7. Java基础知识【下】( 转载)

    http://blog.csdn.net/silentbalanceyh/article/details/4608360 (最终还是决定重新写一份Java基础相关的内容,原来因为在写这一个章节的时候没 ...

  8. Oracle数据库基础知识

    oracle数据库plsql developer   目录(?)[-] 一     SQL基础知识 创建删除数据库 创建删除修改表 添加修改删除列 oracle cascade用法 添加删除约束主键外 ...

  9. java基础知识小总结【转】

    java基础知识小总结 在一个独立的原始程序里,只能有一个 public 类,却可以有许多 non-public 类.此外,若是在一个 Java 程序中没有一个类是 public,那么该 Java 程 ...

随机推荐

  1. C++ Primer学习笔记一

    /* 题目要求把字符串BRGBBGRRGBBGBBBGRRGBGRG按RGB顺序排列,空间复杂度为O(1) */#include<iostream> using namespace std ...

  2. Linux:Vim

    模式介绍: Vim具备6种基本模式和5中派生模式. 普通模式 启动后的默认模式,用于:移动光标.删除文本等待,常用命令: dd:删除当前行. [number]dd:连续执行number对应次数的dd命 ...

  3. 抢小米软件html版(简单有效)

    地球人都知道小米性价比高,大家都很期待,但是抢小米却是一件很头疼的事. 本来抢的人就多,还有一些大牛.黄牛使用软件来抢,人家有成百上千台电脑,开上几万个线程,很难抢过人家... 小菜分享一款简单的小米 ...

  4. java5 Lock用法

    锁是控制多个线程对共享资源进行访问的工具.通常,锁提供了对共享资源的独占访问.一次只能有一个线程获得锁,对共享资源的所有访问都需要首先获得锁.不过,某些锁可能允许对共享资源并发访问,如 ReadWri ...

  5. linux下ssh远程登录服务器入门操作

    使用用户名密码登录 在命令行中输入命令: ssh username@ip_address -p port 之后系统会提示输入密码,输入后即可登录 如果不添加-p选项,则默认是22端口 还可以使用-l选 ...

  6. Java程序员的日常——经验贴(纯干货)

    工作当中遇到的事情比较杂,因此涉及的知识点也很多.这里暂且记录一下,今天遇到的知识点,纯干货~ 关于文件的解压和压缩 如果你的系统不支持tar -z命令 如果是古老的Unix系统,可能并不认识tar ...

  7. C语言实现单链表-01版

    单链表的应用非常广,它可以实现栈,队列等: Problem 我对学习任何东西都希望能找到尽可能简单的例子,而不是看起来好高大上的: 对链表这样简答的数据结构,有些书也是写得太过“完美”啦: 初学者很难 ...

  8. atitit.插件体系设计总结o73.doc

    1. 两大类型:微内核(级联树形结构)与巨内核(管理容器,并联结构). 1 2. 通用插件接口 1 3. 插件的绑定and 初始化 2 4. 微内核插件平台设计 2 5. 参考 2 1. 两大类型:微 ...

  9. Javascript创建对象的学习和使用

    <html> <head> <meta charset="utf-8"> <title>javascript对象的学习</ti ...

  10. android: 服务的基本用法

    9.3   服务的基本用法 了解了 Android 多线程编程的技术之后,下面就让我们进入到本章的正题,开始对服务 的相关内容进行学习.作为 Android 四大组件之一,服务也少不了有很多非常重要的 ...