[第一篇]object c 和xcode开发工具撸代码初探吐槽

开发工具吐槽

  1. 开发工具似乎没有主动补全的快捷键. 比如输入NSL手动把提示关闭了,没法再让它弹出勒 (发现时按esc得,不知道能不能改...)
  2. 开发工具似乎自动提示选中一个提示智能用触摸板操作,没法用enter,或者空格选中,而 tab在一个的时候可以选中,但是多个的时候无效.

语法吐槽和语法概述

object c是我见过的最蛋疼的语法,但是就难度而言,可能也没法跟某些vb语法相比,我曾经写的vb程序才是最头疼的.. 不过面相对象的操作比较怪异.

  1. 和c语言一样,object c也分两套文件,.h 和.m
  2. -代表的是非静态方法,+代表静态方法
  3. 访问成员方法貌似加self关键词没用
  4. 不能顾名思义,否则入坑,比如@interface实际上是类的修饰符声明
  5. 实现文件盒声明文件都特么要写@end
  6. 基本上对象的操作都得用[ 和]包裹起来,用习惯了就好,我感觉这就是开发工具取出东西的时候逻辑混乱,导致开发了这样操蛋另类得语法. c++用 -> php用=>java c#用. 如 person.eat() 参数则用,区分 而 object c呢访问之间是空格,但是左边和右边用[ 和]包裹,参数也比较奇葩,用:
  7. 没有包名得概念,都是用前缀区分.也就是冲突这种东西自己把控.
  8. 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]);
  1. 声明和实现的参数名字可以不一样.
  2. 第二个参数 冒号前面:必须加参数描述加在冒号前面,,调用的时候用来告诉这个东西是啥,如[student setNoAndAge:10 novalue:20120206]; 其中novalue就是描述,有人认为这是object c得优点 那我跟你说吧,其他开发工具能自己根据参数名自动显示参数名,哪有objectc这样必须强制浪费别人时间.,
  3. 目前我现在没有办法通过self.读取成员变量,也就是说如果参数得名字和成员变量名字一样就翻车了.
经验分享 程序员 微信小程序 职场和发展