[objective-c] 01 - 语法基础

简介

本章内容主要对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-10-31 15:36:26

[objective-c] 01 - 语法基础的相关文章

C#-01.语法基础

a. 语法基础 i. 命名空间(namespace):是 C# 中组织代码的方式,用来声明命名空间 1. 语法:namespace 命名空间名称{ //命名空间的声明 } 2. 作用:可以把紧密相关的一些代码放在同一个命名空间中,大大提高管理和使用的效率 3. 与 Java 的不同处:Java 的是使用 package(包) 的关键字,作用是与 namespace 类似 i. using 关键字:用来引用其他命名空间 1. 语法:using 类名; 2. 与 Java 的不同处:Java 的是使

Java语法基础

Java语法基础 1.  关键字 某些单词对编译器有着特殊的含义,并且不能作为标示符使用,全部是小写字母 Java语言关键字 abstract boolean break byte case catch char class try do default continue double else extends assert final finally float for If implement import instanceof int interface long native new g

java语法基础一

Java语法基础一 Java代码基本格式 Java中所有程序代码都必须存在于一个类中,用class关键字定义类,在class之前可以有一些修饰符.格式如下: 修饰符 class 类名 { 程序代码 } 注:1.Java是严格区分大小写的. 2.Java程序中一句连续的字符串不能分开在两行中写. Java程序的注释 Java里的注释有三种类型: 1.单行注释 在注释内容前面加“//”,格式为: 代码; //注释内容 2.多行注释 以斜杠加星号开头,以星号加斜杠结尾. 3.文档注释 以斜杠加两个星号

Swift语法基础入门三(函数, 闭包)

Swift语法基础入门三(函数, 闭包) 函数: 函数是用来完成特定任务的独立的代码块.你给一个函数起一个合适的名字,用来标识函数做什么,并且当函数需要执行的时候,这个名字会被用于“调用”函数 格式: func 函数名称(参数名:参数类型, 参数名:参数类型...) -> 函数返回值 { 函数实现部分 } 没有参数没有返回值 可以写为 ->Void 可以写为 ->() 可以省略 Void.它其实是一个空的元组(tuple),没有任何元素,可以写成() func say() -> V

javascript语法基础-变量与函数

三 javascript语法基础-变量与函数 (一)变量的声明与运用 JavaScript中的变量与Java.C等强类型语言有很大区别,虽然在JavaScript中具有字符串.数字等数据类型. 变量申明语句的结构是var保留字加标识符,var和标识符之间用空格隔开. 赋值语句的结构是在变量和需要赋的值之间加上一个等号,例如a=1的含义是将变量a的值指定为1. 变量在定义的时候也可以同时赋值,如var a=1. PS:在变量使用前事先进行声明是个良好的编程习惯,这对将来学习Java等其他语言有帮助

php语法基础

php变量 php变量用于存储字符,数字,数组甚至对象资源等,以便在我们需要的地方使用. $变量名=值; 变量名以字母(a-z,A-Z)或者下划线_开始,后面可以跟 任意字母或数字以及下划线,但不能是空格. 例子: <?php $var_char="你好"; echo $var_char; ?> 结果为:你好! 延伸:与c语言等强类型的编程语言不通,php 是一门松散类型的语言,即不需要在设置变量之前 声明该变量.根据变量被设置的方式,php会自动 地将变量转换成正确的数据

iOS复习笔记2:Objective-C语法基础

一 语法基础 1 关键字 关键字基本上都是以@开头,常见关键字如下: @interface,@implement,@end,@public,@private,@selector,@required,@encode等 其他id,self,super等 2 字符串以@开头 @"Hello world!" 3 布尔类型Yes/No 4 空类型nil(值为0) 5 其他C语言语法 二 OC的HelloWorld程序 // helloworld.m #import <Foundation/

java基础知识(2)---语法基础

二:java语法基础: 1,关键字:其实就是某种语言赋予了特殊含义的单词. 保留字:其实就是还没有赋予特殊含义,但是准备日后要使用过的单词. 2,标示符:其实就是在程序中自定义的名词.比如类名,变量名,函数名.包含 0-9.a-z.$._ : 注意: 1),数字不可以开头. 2),不可以使用关键字. 3,常量:是在程序中的不会变化的数据. 4,变量:其实就是内存中的一个存储空间,用于存储常量数据. 作用:方便于运算.因为有些数据不确定.所以确定该数据的名词和存储空间. 特点:变量空间可以重复使用

01背包基础 (杭电2602)

01背包问题: 有一个体积为V的背包,有n件物品,每件物品的体积,价值分别为w[i],p[i];要从n件物品中选些放入背包中,使背包里物品的总价值最大. 动态方程:c[i][j]=max(c[i-1][j],c[i-1][j-w[i]]+p[i]). 有关动态方程方面的代码: for (int i = 1; i <= n; i++) { for (int j = 1; j <= total_weight; j++) { if (w[i] > j) { c[i][j] = c[i-1][j