// // ReViewClass.h // hellowWorld // 本类是oc复习练手类 // Created by hongtao on 2018/3/26. // Copyright © 2018年 hongtao. All rights reserved. // #import <Foundation/Foundation.h> /** OC常量: 头文件里声明常量: extern NSString * const MyOwnConstant; extern NSString * const YetAnotherConstant; 在.m中通过赋值定义常量: NSString * const MyOwnConstant = @"myOwnConstant"; NSString * const YetAnotherConstant = @"yetAnotherConstant"; */ //常量声明 注意:可以在@interface外面声明。 extern const NSString* EAST ; extern const NSString* WEST ; @interface ReViewClass : NSObject{ /** 要点 (1)基类的私有属性能被继承,不能被使用。 (2)OC中的继承是单继承:也就是说一个类只能一个父类,不能继承多个父类 (3)OC只能单继承 (4)OC所有类都有NSbObject基类 **/ /** 范围修饰词 (1)@public (公开的)在有对象的前提下,任何地方都可以直接访问。 (2)@protected (受保护的)只能在当前类和子类的对象方法中访问 (默认访问权限) (3)@private (私有的)只能在当前类的对象方法中才能直接访问 (4)@package (框架级别的)作用域介于私有和公开之间,只要处于同一个框架中就可以直接通 过变量名访问 **/ @public int _id ; @public NSString *_name ; /* 不写关键字默认是@private private 变量能不能被继承? 能继承不能用,除非父类提供操作方法 */ @private int classId ; } //常量声明,可以放这里,但不能放上面{}内。 //extern const NSString* NORTH =@"north",不能在头文件里直接赋值。 extern const NSString* NORTH; extern const NSString* SOUTH; @property (assign) NSString* mDescription ; /* 属性: (1)关键字@@property (2)自动合成getter和setter方法。当声明一个属性(property)的时候编译器默认情况下会自动生成相关的getter和setter方法 (3)属性(property)关键词能够传递出相关行为的额外信息。属性提供了一些可能会使用的特性来进行声明, 包括 assign vs copy vs weak vs strong atomic vs vs nonatomic readwrite vs readonly 老版本 @property 需要在.m文件中对应使用synthesize 新版synthesize作用如下: 1.@synthesize 的作用:是为属性添加一个实例变量名,或者说别名。同时会为该属性生成 setter/getter 方法。 2.禁止@synthesize:如果某属性已经在某处实现了自己的 setter/getter ,可以使用 @dynamic 来阻止 @synthesize 自动生成新的 setter/getter 覆盖。 3.内存管理:@synthesize 和 ARC 无关。 4.使用:一般情况下无需对属性添加 @synthesize ,但一些特殊情形仍然需要,例如protocol中声明的属性。 */ /** 在括号外面声明方法,比如set get 方法。 */ -(void)set_id :(int)stuId ; /* set_id知识点: (1)oc 语法中如果想使用和java一样的"." 去访问类成员变量,那么必须定义一个与变量名相同的get方法。 注意是get+变量名: 例如有set_id以后ReViewClass 实例指针可以 ReViewClass._id ;否则 ReViewClass->_id ; (2)在点语中可以调用不带参数的任何方法如:-(NSString*)getIdAndName; */ -(void)setName:(NSString *)stuName; -(int)getId; -(NSString*)getName ; -(NSString*)getIdAndName: (NSUInteger) stuId; -(NSString*)getIdAndName; /* 可以方法重载 同名不同参数 */ -(ReViewClass *) init ; +(int) getInstanceCount ; @end
// // ReViewClass.m // hellowWorld // // Created by hongtao on 2018/3/26. // Copyright © 2018年 hongtao. All rights reserved. // #import "ReViewClass.h" /** 静态变量的特性: (1)静态变量的作用域是与它定义的位置有关系 定义在文件中它的作用域就是整个文件,并且是私有的,其他的类或其他的文件是不可以访问该静态变量的 定义在方法内,它的作用域就是这方法,其他的方法是不可以访问该静态变量 (2)静态变量只初始化一次(和java中是一样的) 类方法和实例方法甚至函数都可以使用静态变量 (3)静态变量定义在源文件中(.m) (4)静态变量可以定义在方法或函数体外,也可以定义在方法(类方法和实例方法)或函数体内。 静态变量定义在方法或函数体外 该方式适用于当静态变量会被本文件内的多个函数使用的情况,最好能把静态变量定义统一放在源文件的起始处(@implementation的外面), */ //静态变量实例。 static int instanceCount ; //常量赋值 const NSString* EAST =@"east" ; const NSString* WEST =@"west"; @implementation ReViewClass @synthesize mDescription ; const NSString* NORTH = @"north" ; -(void)set_id:(int)stuId{ _id = stuId ; } -(void)setName:(NSString *)stuName{ _name = stuName ; } -(int)getId { return _id ; } -(NSString*)getName { return _name ; } -(NSString*)getIdAndName: (NSUInteger) stuId; { NSMutableString * str = [[NSMutableString alloc]init]; [str appendString:_name]; [str appendString:[NSString stringWithFormat:@"id:%d",_id]]; return str ; } -(NSString*)getIdAndName; { NSMutableString * str = [[NSMutableString alloc]init]; if(nil!=_name) [str appendString:_name]; [str appendString:[NSString stringWithFormat:@"id:%d",_id]]; return str ; } +(NSString *)toString{ return [NSString stringWithFormat:@"id:%d" ,1000]; } //类方法用于操作静变量 +(int) getInstanceCount { return instanceCount ; } -(ReViewClass*) init{ instanceCount++; return [super init]; } @end
#import <Foundation/Foundation.h> #import "ReViewClass.h" int main(int argc, const char * argv[]) { @autoreleasepool { extern NSString* NORTH ; // insert code here... NSLog(@"Hello, World!"); ReViewClass *reviwClass = [[ReViewClass alloc]init]; ReViewClass *reviwClass1 = [[ReViewClass alloc]init]; ReViewClass *reviwClass2 = [[ReViewClass alloc]init]; ReViewClass *reviwClass3 = [[ReViewClass alloc]init]; ReViewClass *reviwClass4 = [[ReViewClass alloc]init]; [reviwClass setName:@"hongtao"]; reviwClass._id = 200; reviwClass.mDescription = @"string property!"; NSLog(@"%@,%@",reviwClass.getIdAndName ,[reviwClass getName]); NSLog(@"%d",[ReViewClass getInstanceCount]); NSLog(@"%@",NORTH); // NSString* temStr =[reviwClass getIdAndName]; //运行了相应方法,但方法返回值并没有得到- (void)performSelector:原型 [reviwClass performSelector:@selector(getIdAndName:) withObject:@(123) afterDelay:(1.2f)]; } return 0; }