Objective-C语法: 一:对象声明语法:类名 * 对象名 = [[类名 alloc] init] [对象名 release] //释放对象的实例 注:alloc是NSObject的类方法,init是实现类的初始化方法 二:类 @interface MyClass:NSObject //接口 { int count; id data; NSString * name;//变量 } - (NSString *) getName;//方法 - (void)setName:(NSString *)name + (float)classMethod:(float *)Method1 keyword:(int) Method2 @end @implementation MyClass //实现 - (NSString)getName { return @""; } @end 三:方法 声明: +/-(返回类型)方法名:(参数类型1)参数名1 参数说明关键字:(参数类型2)参数名2 (...)... - 类实例的方法 1-[self 方法名] 2-MyClass * myclass = [[MyClass alloc] init]; [myclass setName:@"name"]; + 类的方法 [MyClass classMethod:12.5 keyword:1] Objective-C基础语法: 1--文件类型 .h 头文件:类,类型,方法,结构体等声明 .m 实现文件:OC 和 C的代码 .mm 实现文件:C++和OC的代码 #import 确保头文件不被重复引用 2--字符串 @"string"; %d 十进制整数 %f 十进制小数(浮点型) %c 字符 %s 字符串 %@ OC字符串 3--日志打印 printf("log message"); NSLog(@"log message"); 4--数据类型和表达式 C语言基本数据类型:int float double char 其它数据类型:Long Longlong Short Unsigned(无符号型0--255) signed(有符号类型-128--127) OC数据类型: id 标识任何类的对象 BOOL boolean(YES/NO) NIL NULL SEL SEL oneMethod=@selector(render);//@selector 得到一个方法的指针 [oneObject performSelector:oneMethod] // 传入名为render的方法,使得oneMethod成为指向render方法的指针,oneObject是实例化的对象 // 通过呼出performselector来执行render方法。performSelector是NSObject类的实现方法。 YES NO 5--循环 for(n=1;n<11;n=n+1){} while(n <= 5){} do{}while(n != 1) 6--条件 if(){}else{}; switch(){case ...} XX?SS:CC 7--内存管理(计数器半自动化管理) alloc +1 release -1 copy 1 重新生成一个新的实例 retain +1 autorelease 再pool栈顶添加此对象 NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; [pool drain] 8--继承 @interface subClassName:superClassName -(BOOL)isKindOfClass:class-object // 判断对象是否是某一种类的实例(包括其父类) -(BOOL)isMenberOFClass:class-object // 判断对象是否是某一种类的实例(不包括其父类) -(BOOL)respondsToSelector:select // 判断对象是否实现某个方法 +(BOOL)instancesRespondToSelector:selector //判断类的实例是否实现某个方法 +(BOOL)isSubclassOfClass:class-object //判断一个类是否是某个类的子类 -(id)performSelector:selector // 让对象呼叫指定的方法 -(id)performSelector:selector withObject:object // 让对象呼叫指定的方法并带有参数 A * a = [[A alloc] init]; if([a isKindOfClass:[A class]] == YES){} 9--类别和协议 类别:@interface myClass(类别名) 类别和继承类似,但类别只能添加新的方法不能添加任何实例变量 协议:类似于Java的interface 协议的声明: @protocol protocolName @optional // 默认实现的方法 -(void)method1 @required // 必须实现的方法 -(void)method2 @end 协议的使用: @interface myClass:superClass<protocol1,protocol2, ...> 协议实现对象委托: @protocol proA -proMethod1; -proMethod2; @end @interface myClassA:NSObject { // 代理变量 id _delegate; } // 代理方法 @property(nonatomic,retain) id _delegate; -(void)callDelegateMethod; @end @implement myClassA @synthesize -delegate; -(void)callDelegateMehtod { [_delegate proMethod1]; [_delegate proMethod2]; } @end @interface myClassB:NSObject<proA> -(void)testDelegate; @end @implement myClassB // 协议(接口)方法实现 -(void)testDelegate { myClass * myA = [[myClass alloc] init]; // 设置代理 _delegate self; [myA callDelegateMethod]; } @end 10--属性 声明:@property (修饰) 类型 属性名 @property(nonatomic,retain) id _delegate; 实现:@synthesize 属性名 @synthesize -delegate; 修饰的类型: readwrite: 变量可读写 readonly: 变量只可以读,需要手动添加setter assign: 变量可以直接赋值,内存引用计数值不变 retain: 对象进行一次引用,内存引用计数值+1 copy: 复制一个新的对象,内存引用计数值为1 nonatomic: 默认为atomic 在多线程是变量互斥 11-快速枚举 NSArray * array = [NSArray arrayWithObjects:@"ome",@"two",@"three",nil]; NSDictionary NSManagedObjectModel NSSet ---------------------------------- for(NSString * element in array){} ---------------------------------- NSEnumerator * enu = [array reverseObjectEnumerator]; for(NSString * element =[enu nextObject]) { if([element isEqualToString:@"three"]) { break; } }
OC基础语法学习笔记
最新推荐文章于 2022-05-22 20:02:57 发布