您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > Objective-C类的设计
基础课程MACAppleInc.Objective-C语言苹果技术开发课程Liujie2012Lession4Objective-C类的设计Liujie2012类的设计•本章内容包括:•类的通用格式•声明对象和对象初始化•变量•@property和@synthesize•协议(protocal)•异常•调用nil对象的方法•指针•线程•Singleton(单例模式)类的设计•一、类的通用格式:Test类h文件•@interfaceTest:NSObject{•intintX;•intintY;•}•-(void)print;•-(void)setIntX:(int)n;•-(void)setIntY:(int)d;•-(int)intX;•-(int)intY;•@end类的设计•一、类的通用格式:Test类m文件•#importTest.h•@implementationTest•-(void)print{•NSLog(@两个数相加的结果为:%i,intX+intY);•}•-(void)setIntX:(int)n{•intX=n;•}•-(void)setIntY:(int)d{•intY=d;•}•-(int)intX{•returnintX;•}•-(int)intY{•returnintY;•}•@end类的设计•一、类的通用格式:调用程序:•Test*test=[[Testalloc]init];•[testsetIntX:1];•[testsetIntY:1];•[testprint];•[testrelease];类的设计•二、声明对象和对象初始化:Test类h文件:•@interfaceTest2:NSObject{•intintX;•}•@propertyintintX;•-(void)print;•-(Test2*)initWith:(int)n;//带参数构造设计•@end类的设计•二、声明对象和对象初始化:Test类m文件:•@implementationTest2•@synthesizeintX;•-(void)print{•NSLog(@%i,intX);•}•-(Test2*)initWith:(int)n{•self=[superinit];•if(self){•[selfsetIntX:n];•}•returnself;•}•@end类的设计•二、声明对象和对象初始化:•调用•Test2*test2=[[Test2alloc]initWith:21];•[test2print];•[test2release];类的设计•三、局部变量、全局变量和实例变量:••全局变量:externintintx;•实例变量:@interface内的变量•局部变量:定义在方法中类的设计•三、局部变量、全局变量和实例变量:••@interfaceTest:NSObject{•intintX;•intintY;•}•-(void)print;•-(void)setIntX:(int)n;•-(void)setIntY:(int)d;•-(int)intX;•-(int)intY;•@end@implementationTest-(void)print{inti=1;NSLog(@%i,i);NSLog(@两个数相加的结果为:%i,intX+intY);}-(void)setIntX:(int)n{intX=n;}-(void)setIntY:(int)d{intY=d;}-(int)intX{returnintX;}-(int)intY{returnintY;}@end类的设计•三、局部变量、全局变量和实例变量:••Test*test=[[Testalloc]init];•[testsetIntX:1];•[testsetIntY:1];•[testprint];•[testrelease];类的设计•四、理解state:••声明静态方法:•@interfaceTest:NSObject{•}•+(int)staticIntY;•@end类的设计•理解state:••实现静态方法:•intintX=10;•staticintintY=10;•@implementationTest•+(int)staticIntY{•intY+=1;•returnintY;•}•@end类的设计•理解state:•调用•NSLog(@%i,[TeststaticIntY]);•NSLog(@%i,[TeststaticIntY]);类的设计•五、变量存储类别:•1、auto:自动局部变量•2、const:常量•3、volatile:线程访问变量•@interfaceTest:NSObject{•}•-(void)print;•@end@implementationTestconstdoublepi=3.14;volatilecharchar1='a';-(void)print{autointi=1;NSLog(@%f,pi);NSLog(@%i,i);NSLog(@%c,char1);}@end类的设计•@property和@synthesize•@property声明属性•@synthesize:自动生成属性访问方法。@interfaceTest:NSObject{intintX;intintY;}@propertyintintX,intY;-(void)print;@end@implementationTest@synthesizeintX,intY;-(void)print{NSLog(@两个数相加的结果为:%i,intX+intY);}@endTest*test=[[Testalloc]init];[testsetIntX:1];[testsetIntY:1];[testprint];[testrelease];类的设计•@property和@synthesize•@property声明属性•属性列表含义:•assign:使用简单赋值语句为实例变量设置值•copy:使用copy方法设置实例变量的值•nonatomic:直接返回值,并且存取互斥,线程保护。•readonly:不能设置实例变量的值,不生成setter•readwrite:自动生成setter,getter•retain:在赋值时自动retain计数•getter=name:指定getter设置的变量•setter=name:指定setter设置的变量类的设计•@interfaceMyClass:NSObject{•intintValue;•floatfloatValue;•}•@propertyint_intValue;•@property(copy)NSString*name;•@propertyfloatfloatValue;•@property(readonly,getter=getANickname)NSString*nickname;•@end类的设计•@implementationMyClass•@synthesize_intValue=intValue,name;•-(float)floatValue{•returnfloatValue;}•-(void)setFloatValue:(float)aValue{•floatValue=aValue;•}•-(NSString*)getANickname{•return@”LEE”;•}类的设计•@interfaceMyClass:NSObject{•MyClass*class1=[[MyClassalloc]init];•[class1set_intValue:1];•[class1setName:@Sam];•[class1setFloatValue:1.1f];•NSLog(@intValueis%i,nameis%@,floatValueis%g,nicknameis%@,•[class1_intValue],[class1name],[class1floatValue],[class1getANickname]);•[class1release];类的设计•多参数设置:@interfaceTest:NSObject{intintX;intintY;}@propertyintintX,intY;-(void)print;-(void)setIntX:(int)nandSetIntY:(int)d;@end@implementationTest@synthesizeintX,intY;-(void)print{NSLog(@两个数相加的结果为:%i,intX+intY);}-(void)setIntX:(int)nandSetIntY:(int)d{intX=n;intY=d;}@endTest*test=[[Testalloc]init];[testsetIntX:1andSetIntY:2];[testprint];[testrelease];类的设计•六、协议:•协议类似于c++对抽象基类的多重继承,协议是多个类共享方法的列表。•如果一个类要遵守一个协议,就必须实现特定协议的所有方法(@required),除非方法是可选的(@optional)协议:Fly@protocolFly-(void)go;-(void)stop;@optional-(void)sleep;@end遵守Fly协议的类FlyTest@interfaceFlyTest:NSObjectFly{}@end@implementationFlyTest-(void)go{NSLog(@go);}-(void)stop{NSLog(@stop);}@endFlyTest*flyTest=[[FlyTestalloc]init];[flyTestgo];[flyTeststop];[flyTestrelease];类的设计•七、异常处理:•@try,@catch,@throw,@finallyTest*test=[[Testalloc]init];@try{[testrelease1];}@catch(NSException*e){NSLog(@Caught%@%@,[ename],[ereason]);}@finally{[testrelease];NSLog(@ok!);}类的设计•八、调用nil对象的方法:•nil对象:一个对象•NULL:一个值。•调用nil不会崩溃和报出异常。一般在dealloc方法上设置对象:-(void)dealloc{self.caption=nil;self.photographer=nill;[superdealloc];}避免为成员变量指向随机数据的可能。类的设计•九、指针:•指针的值是指针本身存储的值,这个值将被编译器当做一个地址,而不是一个数值,在32位程序中,指针的值都是一个32位整数。•指针所指向的内存区就是从指针的值所代表的内存地址开始,长度为sizeof(指针所指的类型)的一段内存。•int*ptr;//指针的类型是int*,指针指向类型是int•char*ptr;//指针的类型是char*,指针指向类型是char•int**ptr;//指针类型是int**,指针指向类型是int*•int(*ptr)[3];//指针类型是int(*)[3],指针指向类型是int()[3]•int*(*ptr)[4];//int*(*)[4],指针指向类型是int*()[4]•Member*myMember;//指针的类型是Member*,指针指向类型是Member类的设计•十、单例模式:•单例模式,仅允许一个实例运行。•实现步骤:•1、声明类是静态的•2、编写获取静态实例的方法•3、重写allocWithZone方法,适应单例•4、实现其它协议规定的方法。
本文标题:Objective-C类的设计
链接地址:https://www.777doc.com/doc-2884400 .html