OC简明教程

OC1-语法基础

简介

本章内容主要对Objective-C语言的基础语法进行阐述,包含以下知识点

  1. OC类的声明语法
  2. OC类的成员变量声明
  3. OC类的方法声明
  4. OC类的实现
  5. OC属性机制
  6. OC对象创建
  7. OC方法调用
  8. OC点语法
  9. Self关键字
  10. 自定义初始化方法

1,OC类的声明

OC声明类的关键字为:@interface@end 

关键字后面跟类目和父类名,类名与父类名间用:进行分隔。

例如:

@interface Triangle: NSObject
@end

这样的语句便声明了一个三角形类。

其中NSObject为系统的根类。OC语法中,创建一个类必须指定其父类。当不确定其父类时,用NSObject类作为默认父类。

2,OC类的成员变量

为一个类声明成员变量的语法非常简单。如下

@interface Triangle: NSObject
{
    //在此大括号内声明成员变量
    double _a;
    double _b;
    double _c;
}
@end

其中_a_b_c分别为此类的成员变量。在OC中成员变量通常以_开头。

成员变量可以设置如下访问权限:

公开访问`@public`

受保护访问`@protected`

私有变量`@private`

其中受保护的权限是默认权限,也是平时开发常用的权限。在受保护权限下,成员变量只能在本类的方法实现中访问,外界无权访问。

3,OC类的方法声明

为一个类声明方法的语法如下

@interface Triangle: NSObject
{
    //在此大括号内声明成员变量
    double _a;
    double _b;
    double _c;
}
-(void)setA:(double)a;
-(void)setB:(double)b;
-(void)setC:(double)c;

-(double)a;
-(double)b;
-(double)c;

-(double)area;
@end

声明方法首先需要确定方法类型。在OC语法中,方法有两种类型分别为

-(void)test;//减号方法,俗称对象方法
+(void)test;//加号方法,俗称静态方法或类方法

一般情况下都为对象方法,只有在下列特殊情况下使用加号方法

  1. 便利构造器方法
  2. 单例share方法
  3. 对纯过程封装

这三种情况会在以后的课程中逐步遇到。目前大家统一都只用减号方法。

声明方法第二步要确定方法的返回值类型。

-(返回值类型)test;

声明方法第三步确定方法名和参数

OC声明方法的语法是由参数描述字段 : (形参类型) 形参名

如果有多个参数,就将此模式依次重复。

-(void)test;//没有输入参数的方法
-(void)testA:(int)a;//有一个参数的方法声明
-(void)testA:(int)a B:(int)b;//有两个参数的方法声明

方法中有两类较特殊的方法

类似-(void)setA:(int)a这样为成员变量赋值的方法称为setter方法

类似-(double)a这样读取成员变量值的方法称为getter方法

4,OC类的实现

OC类中所有声明的方法都需要相应实现。实现关键字为@implementation`类名`

例如:

@implementation Triangle

-(void)setA:(int)a
{
    _a = a;
}
-(void)setB:(int)b
{
    _b = b;
}
-(void)setC:(int)c
{
    _c = c;
}

-(double)a
{
    return _a;
}
-(double)b
{
    return _b;
}
-(double)c
{
    return _c;
}
-(double)
{
    //根据成员变量的值,计算三角形面积
    double s=(_a+_b+_c)/2;
    return sqrt(s*(s-_a)*(s-_b)*(s-_c));
}

@end

5,OC属性机制

属性机制是通过声明属性,从而在编译是自动补充代码的一项技术。

声明一个属性在编译时,会补充一下一系列代码

  1. 声明一个成员变量
  2. 声明一个成员变量的setter方法
  3. 声明一个成员变量的getter方法
  4. 实现一个成员变量的setter方法
  5. 实现一个成员变量的getter方法

声明属性的关键字为`@property`代码如下:

@property double a;

注意:声明的属性为a,但是编译时生成的成员变量为_a。

通过属性可以把之前的三角形类重构

@interface Triangle : NSObject

@property double a;
@property double b;
@property double c;

-(double)area;

@end
@implementation Triangle

-(double)
{
    //根据成员变量的值,计算三角形面积
    double s=(_a+_b+_c)/2;
    return sqrt(s*(s-_a)*(s-_b)*(s-_c));
}

@end

6,OC对象创建

OC语法中创建对象分三步,缺一不可。

  1. 创建对象指针
  2. 为对象指针分配内存:alloc方法分配内存
  3. 将分配的内存进行初始化:init初始化内存
Triangle * t;
t = [[Triangle alloc] init];

7,OC方法调用

完成对象创建之后,就可以用对象指针调用对象的方法。

OC语言中方法调用使用[]操作符。例如:

[t setA:10];
double = [t area];

操作符内有两个参数:第一个参数为对象指针,第二个参数为需要调用的方法。

-号方法,俗称对象方向,都需要用对象指针进行调用。

+号方法,俗称类方法,都需要用类目进行调用,例如alloc方法。

8,OC点语法

点语法是OC的另一个重要特性。主要用来简化settergetter方法的调用代。

[t setA:10];//正常语法调用setter方法
t.a = 10;//使用点语法调用setter方法

double a1 = [t a];//正常语法调用getter方法
double a2 = t.a;//使用点语法调用getter

使用点语法调用和正常调用完全等价,编译器会根据.和等号的关系自动调用setter还是getter方法。

9,Self关键字

在OC语言中,self关键字为方法调用时的隐含参数。self可以在方法的实现中进行使用,代表调用此方法的对象。通常我们使用self调用自己的某些方法

10,自定义初始化方法

当一个对象在创建时,需要某些不能缺少的值时。我们可以自己重新定义初始化方法。

例如三角形对象在创建的时候必须有三个边长信息,不然三角形对象无意义。

我们就要声明一个新的初始化方法,并实现

-(instancetype)initWithA:(double)a B:(double)b C:(double)c;
- (instancetype)initWithA:(double)a B:(double)b C:(double)c
{
    self = [super init];
    if (self)
    {
        self.a = a;
        self.b = b;
        self.c = c;
    }
    return self;
}

其中,instancetype为固定写法,表示返回类型有编译检查器自动辨别。在实现中将输入参数依次赋值给本身属性。

再调用如下代码

Triangle * t = [[Triangle alloc] initWithA:10 B:11 C:12];

这样就实现了初始化同时赋值。

时间: 2024-08-10 21:48:43

OC简明教程的相关文章

Lisp简明教程

此教程是我花了一点时间和功夫整理出来的,希望能够帮到喜欢Lisp(Common Lisp)的朋友们.本人排版很烂还望多多海涵! <Lisp简明教程>PDF格式下载 <Lisp简明教程>ODT格式下载 具体的内容我已经编辑好了,想下载的朋友可以用上面的链接.本人水平有限,如有疏漏还望之处(要是有谁帮我排排版就好了)还望指出!资料虽然是我整理的,但都是网友的智慧,如果有人需要转载,请至少保留其中的“鸣谢”页(如果能有我就更好了:-)). Lisp简明教程 整理人:Chaobs 邮箱:[

Linux防火墙iptables简明教程

前几天微魔部落再次遭受到个别别有用心的攻击者的攻击,顺便给自己充个电,复习了一下linux下常见的防火墙iptables的一些内容,但是无奈网上的很多教程都较为繁琐,本着简明化学习的目的,微魔为大家剔除了许多冗余的内容,提取出尽量多的精华部分成文,和大家共同学习,本文涉及的内容包括如下 Linux防火墙iptables简明教程 1.安装iptables 2.查看现有的iptables规则 3.删除某iptables规则 4.清除现有iptables规则 5.创建规则 6.设置开机启动 7.保存i

Markdown简明教程4-Markdown UML图

1. 前言 Markdown是一种轻量级的标记语言,把作者从繁杂的排版工作中解放出来,实现易读易写的文章写作,已经逐渐成为事实上的行业标准.CSDN博客支持Markdown可以让广大博友更加专注于博客内容,大赞.但是,不少博友可能对Markdown比较生疏,本博接下来用一个系列文章<Markdown简明教程>扼要介绍Markdown,希望可以对大家有所帮助. 系列教程目录 关于Markdown Markdown基本使用 Markdown表格和公式 Markdown UML图 CSDN Mark

JSP 简明教程(二):JSP基本语法

基本语法 JSP只是在html的基础上嵌入一些动态的元素.下面是HelloWorld代码: <html> <% out.println("hello world"); %> </html> 以上代码中的<% %>就是动态元素.JSP中所有的特殊语法如下: <% %>:用于表示一段Java代码.这段代码在编译之后会放在_jspService()方法中. <%! %>:多了一个叹号,也用于表示一段Java代码,但是这段

第一课 C语言简明教程

1序言: 1与Java.C#等高级语言相比,C语言却非常简单,学习简单,使用也简单,但是也非常重要,到目前为止基本上操作系统的内核代码超过百分之九十使用C语言完成,因此学好C语言是学好计算机这门课程的基础,特别是进入系统编程尤为明显. 今天是本人复习C语言课程的第一课,主要重新记录一下C语言的基础知识,这节课涉及到C语言的结构.变量以及类型.输入输出.条件判断以及循环知识. 2知识点: 2.1 C语言的结构 2.1.1 通常情况下C语言程序是由: 1.相关的代码注释,使用/* ··· */可注释

Vbs 脚本编程简明教程之一

-为什么要使用 Vbs ? 在 Windows 中,学习计算机操作也许很简单,但是很多计算机工作是重复性劳动,例如你每周也许需要对一些计算机文件进行复制.粘贴.改名.删除,也许你每天启动 计算机第一件事情就是打开 WORD ,切换到你喜爱的输入法进行文本编辑,同时还要播放优美的音乐给工作创造一个舒心的环境,当然也有可能你经常需要对文本中的某 些数据进行整理,把各式各样的数据按照某种规则排列起来--.这些事情重复.琐碎,使人容易疲劳. 第三方软件也许可以强化计算机的某些功能,但是解决这些重复劳动往

Smarty教程1.引擎定义2.主要优点3.简明教程4.使用判断5.循环数组6.常见问题8.解释程序

Smarty是一个php模板引擎.更准确的说,它分开了逻辑程序和外在的内容,提供了一种易于管理的方法.可以描述为应用程序员和美工扮演了不同的角色,因为在大多数情况下 ,他们不可能是同一个人.例如,你正在创建一个用于浏览新闻的网页,新闻标题,标签栏,作者和内容等都是内容要素,他们并不包含应该怎样去呈现.在Smarty的程序里,这些被忽略了.模板设计者们编辑模板,组合使用html标签和模板标签去格式化这些要素的输出(html表格,背景色,字体大小,样式表,等等).有一天程序员想要改变文章检索的方式(

《Python简明教程》总结

Python经典教程<Python简明教程> 目录: 为什么Python 安装Python 体验Python Python数据类型 运算符与表达式 控制流 函数 模块 数据结构 解决问题 面向对象 输入输出 异常 标准库 更多的内容

Java泛型简明教程

Java泛型简明教程 博客分类: Java综合 JavaApple数据结构CC++ Java泛型简明教程 本文是从 Java Generics Quick Tutorial 这篇文章翻译而来. 泛型是Java SE 5.0中引入的一项特征,自从这项语言特征出现多年来,我相信,几乎所有的Java程序员不仅听说过,而且使用过它.关于Java泛型的教程,免费的,不免费的,有很多.我遇到的最好的教材有: The Java Tutorial Java Generics and Collections ,