命名规则
制定名称的规则:名称必须以字母和下划线开头,之后可以是任何字母,下划线和0~9的数字组合。
以下名称是非法的;
1.sum$value————$是非法字符
2.piece flag————名称中间不能有空格
3.3Spencer————名称不能以数字开头
4.int ————int保留字
命名类的时候,类名通常以大写字母开头。另一方面,实例变量,对象,以及方法的名称时,通常以小写字母开头。为使程序具有可读性,名称中要用大写字母表示新单词的开头。例如:
AddressBook————可能是一个类名
currentEntry————可能是一个对象
current_entry————可以用下划线作为单词的分隔
addNewEntry————可能是一个方法名
编程时要注意名称的制定规则会大大增强程序的自解释性。
实例和方法
类的独特存在就是实例,对实例执行的操作称为方法。某些情况下,方法可以应用于类的实例或者类的本身。
对象是类的独特表示,每个对象都包含一些通常对该对象来说是私有有的信息(数据),方法提供访问和改变这些数据的手段。
格式为:
[receiver message]
左括号后紧跟类的名字或者该类的实例的名字,后面是一个或多个空格,空格后面是将要执行的方法。
以分数类为例介绍oc的类,对象和方法代码如下:
#import <Foundation/Foundation.h>
@interface Fraction : NSObject
-(void) print;
-(void) setNumerator:(int) n;
-(void) setDenominator:(int) d;
-(int) numerator;
-(int) denominator;
@end
@implementation Fraction //可以写成@implementation Fraction:NSObject但是会有警告
{
int numerator; //实例变量
int denominator; //实例变量
}//实例变量也可以写到@interface中
-(void) print
{
NSLog(@"%i/%i",numerator,denominator);
}
-(void) setNumerator:(int) n
{
numerator=n;
}
-(void) setDenominator:(int) d
{
denominator=d;
}
-(int) numerator
{
returnnumerator;
}
-(int) denominator
{
returndenominator;
}
@end
int main(int argc, const char * argv[])
{
@autoreleasepool {
Fraction* myFaction;
myFaction=[Fraction alloc];
myFaction=[myFaction init];
//以上可以写成Fraction *myFraction=[[Fraction alloc]init];
[myFaction setNumerator:1]; //消息发送给指针
[myFaction setDenominator:3];
NSLog(@"\nThe value of myfraction is:");
[myFaction print];
NSLog(@"The value of myFraction is:%i/%i",[myFactionnumerator],[myFaction denominator]);
}
return 0;
}
运行结果为:
@interface部分用于描述类和类的方法,也可以在这里为类声明实例变量;
定义新类时,首先要告诉编译器该类来自何处(必须以他的父类命名);并且定义处理该类的对象时的各种方法或操作的类型;还会列出一些元素,称为属性。
格式为:
@interface NewClassName:ParentClassName
<span style="white-space:pre"> </span>propertyAndMethodDeclarations;
@end
类方法和实例方法
方法声明开头为负号(-)告诉编译器该方法是一个实例方法,能够对类实例进行一些操作,可以直接访问它的实例变量,例如设置值,检索值。
方法声明开头为正号(+)告诉编译器该方法是一个类方法,能够对类本身进行一些操作,不可以访问类实例,例如创建类的新实例。
-(void) setDenominator:(int) d;
负号表示方法类型;
(void)表示返回类型
setDenominator表示方法名称;
:表示方法有参数;
(int)表示参数类型;
n表示参数名字;
@implementation部分用于描述数据(类对象的实例变量存储的数据),并实现在接口中声明方法的实际代码;
print引用的实例变量包含在作为作为消息接受者的对象中;
program部分实现程序的目的
prgram可以跨越多个文件
alloc方法继承自一个父类,在内存中为它保留足够的空间用于存储对象数据,返回储存数据的位置,保证对象的所有实例变量都变成初始状态,然而并不是说明该对象已经进行正确的初始化以供使用。
init方法用于初始化类的实例变量,init消息发送给类的实例而非是类,返回一个初始化的对象。
new方法可以将alloc和init操作结合起来。