第一篇objectc和xcode开发工具撸代码初探吐槽
简书链接:第一篇objectc和xcode开发工具撸代码初探吐槽
文章字数:668,阅读全文大约需要2分钟
开发工具吐槽
- 开发工具似乎没有主动补全的快捷键. 比如输入
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的关键字.
和其他语言代码举例
1 | Student *student= [[Student alloc] init]; |
java代码
1 | Student student =new Student(); |
撸代码
1 | ``` |
1 |
#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
1 | 操作文件 |
#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;
}
1 |
|
-(int)age;
-(int)no;
-(void)setNoAndAge:(int)agearg novalue:(int)noarg;
1 | 实现文件 |
-(int)age{
return age;
}
-(int)no{
return no;
}
-(void)setNoAndAge:(int)ageargxxx novalue:(int)noargxxx{
age=ageargxxx;
no=noargxxx;
}
1 |
|
NSLog(@"call age %d ",age);
[student setNoAndAge:10 novalue:20120206];
age=[student age];
NSLog(@"call age %d no %d;",age,[student no]);
1. 声明和实现的参数名字可以不一样.
2. 第二个参数 冒号前面```:```必须加参数描述加在冒号前面,,调用的时候用来告诉这个东西是啥,如``` [student setNoAndAge:10 novalue:20120206];``` 其中novalue就是描述,有人认为这是object c得优点 那我跟你说吧,其他开发工具能自己根据参数名自动显示参数名,哪有objectc这样必须强制浪费别人时间.,
3. 目前我现在没有办法通过```self.```读取成员变量,也就是说如果参数得名字和成员变量名字一样就翻车了.