开发工具吐槽
- 开发工具似乎没有主动补全的快捷键. 比如输入
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.
读取成员变量,也就是说如果参数得名字和成员变量名字一样就翻车了.