[第一篇]object c 和xcode开发工具撸代码初探吐槽
开发工具吐槽
- 开发工具似乎没有主动补全的快捷键. 比如输入NSL手动把提示关闭了,没法再让它弹出勒 (发现时按esc得,不知道能不能改...)
- 开发工具似乎自动提示选中一个提示智能用触摸板操作,没法用enter,或者空格选中,而 tab在一个的时候可以选中,但是多个的时候无效.
语法吐槽和语法概述
object c是我见过的最蛋疼的语法,但是就难度而言,可能也没法跟某些vb语法相比,我曾经写的vb程序才是最头疼的.. 不过面相对象的操作比较怪异.
- 和c语言一样,object c也分两套文件,.h 和.m
- -代表的是非静态方法,+代表静态方法
- 访问成员方法貌似加self关键词没用
- 不能顾名思义,否则入坑,比如@interface实际上是类的修饰符声明
- 实现文件盒声明文件都特么要写@end
- 基本上对象的操作都得用[ 和]包裹起来,用习惯了就好,我感觉这就是开发工具取出东西的时候逻辑混乱,导致开发了这样操蛋另类得语法. c++用 -> php用=>java c#用. 如 person.eat() 参数则用,区分 而 object c呢访问之间是空格,但是左边和右边用[ 和]包裹,参数也比较奇葩,用:
- 没有包名得概念,都是用前缀区分.也就是冲突这种东西自己把控.
- object c 的关键词都携带@ 不带的关键词则代表是c的关键字.
和其他语言代码举例
Student *student= [[Student alloc] init]; [student publicObjectSetAgeMethod:10];//参数用冒号 int age= [student publicObjecGetAgetMethod];
java代码
Student student =new Student(); student. publicObjectSetAgeMethod(10); int age=student. publicObjecGetAgetMethod();
撸代码
.h文件
#import <Foundation/Foundation.h> @interface Student :NSObject { int age; } -(int) publicObjecGetAgetMethod;// get -(void)publicObjectSetAgeMethod:(int)agearg;//set @end
.m文件
#import <Foundation/Foundation.h> #import "Student.h" @implementation Student -(int)publicObjecGetAgetMethod{ return age; } -(void)publicObjectSetAgeMethod:(int)argearg{ // self. age=argearg; NSLog(@"call set arg arg %d ",argearg); } @end
操作文件
#import <Foundation/Foundation.h> #import "Student.h" int main(int argc, const char * argv[]) { @autoreleasepool { NSLog(@" arg value %s","fff");//参数字符串不需要加@ // Student *student= [Student alloc]; // student= [student init]; Student *student= [[Student alloc] init]; [student publicObjectSetAgeMethod:10]; int age= [student publicObjecGetAgetMethod]; NSLog(@"call age %d ",age); // [student release];// } return 0; }
进阶多参
声明文件
-(int)age; -(int)no; -(void)setNoAndAge:(int)agearg novalue:(int)noarg;
实现文件
-(int)age{ return age; } -(int)no{ return no; } -(void)setNoAndAge:(int)ageargxxx novalue:(int)noargxxx{ age=ageargxxx; no=noargxxx; }
调用
NSLog(@"call age %d ",age); [student setNoAndAge:10 novalue:20120206]; age=[student age]; NSLog(@"call age %d no %d;",age,[student no]);
- 声明和实现的参数名字可以不一样.
- 第二个参数 冒号前面:必须加参数描述加在冒号前面,,调用的时候用来告诉这个东西是啥,如[student setNoAndAge:10 novalue:20120206]; 其中novalue就是描述,有人认为这是object c得优点 那我跟你说吧,其他开发工具能自己根据参数名自动显示参数名,哪有objectc这样必须强制浪费别人时间.,
- 目前我现在没有办法通过self.读取成员变量,也就是说如果参数得名字和成员变量名字一样就翻车了.
上一篇:
多线程四大经典案例