OC思想与基础语法

OC简介

  • C语言的基础上,Objective - C增加了一层最小的面向对象语法

  • 完全兼容C语言

  • 可以在OC代码中混入C语言,甚至是C++代码

  • 可以使用OC开发Mac OS X平台和iOS平台的应用

  • OC是面向对象的,C是面向过程的,只是解决问题的不同思想

  • 面向对象(关注解决问题需要哪些东西)如,打电话找手机

  • 面向过程(关注解决问题需要哪些步骤)如,打开手机,按号码,拨打

  • 面向对象封装的好处

    • 更接近人类的思考方式
    • 只需要关注对象,不需要关注步骤

OC语法概括

  • 基本所有关键字都是以@开头
    @interface、@implementation、@end、@public、@protected
    @private、@selector、@try、@catch、@throw、@protocol
    @optional、@required、@class、@property、@synthesize
    
    self、super、id、__cmd、__block、__strong、__weak
    
  • 字符串以@开头
    比如@"Hello"OC中的字符串,而"Hello"则是C语言中的字符串
  • 其他语法
基本数据类型 int、char、float、double、BOOL(YES\NO)[本质是char]
nil 相当于C语言中的NULL,也就是 0
基本语句 循环语句do while 、while 、for、条件语句if、if-else、switch
注释 //单行注释、/*...*/多行注释
屏幕输出 NSLog(@"Hello");NSLog(@"age is %i",24);会自动换行

OC程序的开发过程

.m源文件-> 编译 ->.o目标文件-> 链接 ->a.out可执行文件

OC基础知识

  • #import的用途

    • #include一样,拷贝文件的内容
    • 可以自动防止文件的内容被重复拷贝
  • 类和对象的关系

    • OC中的类相当于造东西的图纸,用来描述一类事物,也就是说,要想创建对象,必须先有类
    • 利用来创建对象,对象的具体存在
    • 面向对象解决问题应该是,先考虑需要设计哪些,再利用类创建多少个对象
    • 每个 "对象" 内部默认有个 "isa 指针" 指向它的类
    • 所有 "对象" 共用一份方法
    • 每个类中有个“superclass 指针”指向它的父类
  • 需要设计哪些,如何设计

    • 的设计,只关心3样东西

      • 类名(事物名称):人(VampireJune)
        • 第一个字母必须是大写
        • 不能有下划线
        • 多个英文单词用驼峰标识
      • 属性(配置) :身高(height)、年龄(age)
      • 行为(功能):跑(run)、吃(eat)
    • 一般名词都是

    • 拥有相同(或类似)属性和行为的对象都可以抽出一个

  • 完整地写一个声明实现

    // 引入 "Foundation" 框架,因为使用了 "NSObject"
    #import <Foundation/Foundation.h>
    
    1. 类的声明:声明对象的属性和行为
    @interface VampireJune : NSObject 
      // 关键字 "@interface" 和 类名 "VampireJune" 之间必须有一个空格
      // NSObject  目的是:让 "VampireJune" 这个类具备创建对象的能力
      // ":" :类名 "VampireJune" 和 "NSObject" 之间的冒号是继承语法
    {// 大括号里 "只能" 用来声明 "对象属性"( 实例变量\成员变量)默认会初始化为0
    
      // @public 可以让外部的指针间接访问对象内部的成员变量
      @public //  "属性" (成员变量)默认是被保护的,不允许指针直接访问
      int age; // 年龄,属性命名完,写一个 ";" 英文分号,告诉这个属性结束了
      double weight; // 体重
    } // 大括号里 "只能" 用来声明 "对象属性",必须要有 大括号
    
    // 方法(行为): 方法名、参数、返回值
    // 声明:在 "@interface @end" 中声明,不能放到大括号内
    // 实现:在 "@implementation @end" 中实现
    - (void) run;
    // 只要是OC对象的方法,必须以减号 "-" 开头
    // OC方法中任何数据类型都必须用小括号 "()" 括住
    // OC方法中的小括号 "()" :括住数据类型 
    @end  // 表示类声明完毕
    
    2. 类的实现
    // 用来实现 "@interface @end" 中声明的方法
    @implementation VampireJune
    // 方法的实现(说清楚方法里面有什么代码)
    - (void) run
    {
      // 访问自己对象内部的属性,直接写属性名
      NSLog(@"%d岁、%f公斤的人跑起来了",age,weight);
      * "对象" 调用某个方法,会跟随 "isa 指针" 找到对应的类,在类里面找一找有没有这个方法
      * 一旦发现有,就调用这个方法,来到方法对应的代码,访问当前对象的成员变量
    }
    
    @end
    
    int main()
    {
      // 在OC中,想执行一些行为,就写上一个中括号 [行为执行者 行为名称];
      // 利用类来创建对象
      // 执行了 "VampireJune" 这个类的 "new" 行为来创建新对象
      //  [VampireJune new] 会创建出一个新对象,并返回新对象本身(新对象地址)
    
      // OC中想修改操纵对象,只能用指针
      // 定义了一个指针变量 "v",将来指向 "VampireJune" 类型的对象
      VampireJune *v = [VampireJune new];
    
      // 给 "v" 所指向的对象的 "age" 属性赋值 
      v->age = 23;
      v->weight= 60.0;
      NSLog(@" age is %d,weight is %f",v->age,v->height);
    
      // 给 "v" 所指向对象 发送一条 "run" 消息(OC的消息机制)
      // 就会调用 这个对象的 "run" 方法,就会去对象的实现里面找这个方法
      // 一旦找到这个方法,就会执行这个方法里面的代码
      [v run]; 
      return 0;
    }
    
    
  • @implementation

    • 没有@interface,只有@implementation,也能成功定义一个类
    • @implementation中不能声明和@interface一样的成员变量
@implementation Car : NSObject
{
  @public
  int wheels; // 轮子
  int speed; // 速度
}

- (void)run
{
  NSLog(@"%d个轮子,%dkm/h的车跑起来了",wheels,speed);
}
@end
  • 对象函数参数
    • 对象成员变量作为函数参数
    • 指向对象的指针作为函数参数
      • 修改指向对象的成员
      • 修改指针的指向

常见错误

  • 只有类的声明,没有类的实现
  • 漏了@end
  • @interface@implementation嵌套
  • 两个类的声明嵌套
  • 成员变量没有写在括号里面
  • 方法的声明写在了大括号里面

语法细节

  • 方法不能当做函数一样调用
  • 成员变量不能在{}中进行初始化、不能被直接拿去访问
  • 类的实现可以写在main函数的后面,一定写在类的声明后面就可以

对象方法和函数的区别

  • 对象方法

    • 对象方法都是以减号-开头
    • 对象方法必须声明在 "@interface @end" 之间,必须实现在 "@implementation @end"之间,对象方法不能独立与类存在
    • 对象方法只能由对象调用
    • 对象方法类\对象所有
    • 对象方法中能访问当前对象的成员变量(实例变量)
  • 函数

    • 函数不属于类,跟类没有关系,只归定义函数的文件所有
    • 函数能写在文件中的任意位置("@interface @end"之间)
    • 函数内部不能直接通过成员变量名访问某个对象的成员变量

对象方法的声明规范

  • 方法首字母小写
  • 从第二个单词开始,首字母大写
  • 尽量写的像句子一样,可读性好
  • 形参首字母小写,超过一个单词,其他首字母大写
  • 形参与形参之间,一定要有一个空格
  • 一个形参对应一个冒号,冒号也是方法名的一部分
  • 返回值永远只有一个
  • 类方法声明规范上面全部适用,只是减号-变为加号+
  • 同一个类中不允许有两个对象方法同名
// 1. 无返回值
// 1.1 无形参
-  (void)pi; // 方法名 :-pi
// 1.2 有形参
-  (void)squareWithNum:(int)num; // 方法名 :-squareWithNum: 

// 2. 有返回值
// 2.1 无形参
-  (int)pi; // 方法名 :-pi
// 2.2 有形参
-  (int)sumWithNum1:(int)num1 andNum2:(int)num2; 
// 方法名 :-sumWithNum1: andNum2:

对象方法图例

//  无形参 有返回值
-  (double)pi; // 方法名 :-pi

// 方法调用
[c pi];
方法解析1.jpg
方法调用1.jpg
//  有1个形参 有返回值
-  (double)square:(double)number; // 方法名 :-square: 

// 方法调用
[c square: 10];
方法解析2.jpg
方法调用2.jpg
//  有多个形参 有返回值
-  (double)sumOfNum1:(double)num1 andNum2(double)num2; 
// 方法名 :-sumOfNum1: andNum2:

// 方法调用
[c sumOfNum1: 10 andNum2: 21];
方法解析3.jpg
方法调用3.jpg
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容