objective-c基础语法教程:类与对象+方法调用,新手快速上手指南

admin IOS开发教程 3


刚学 Objective-C 是不是总被 “类” 和 “对象” 绕晕?看到代码里的@interface @implementation就头大?方法调用用[]包裹,总担心写错格式?不少新手朋友跟我吐槽,别的语言变量函数看着都顺,Objective-C 这些语法规则咋这么 “特立独行”。其实啊,类与对象是 Objective-C 的核心,就像盖房子的图纸和房子本身,搞懂它们,语法就通了一半。今天兔子哥就用大白话讲透类与对象的用法,再教你怎么正确调用方法,附上行之有效的避坑指南,新手跟着练,一周就能顺顺当当写基础代码了。

一、先搞懂:类与对象到底是啥?用生活例子给你讲明白


Q:“类和对象听着太抽象,能不能用大白话解释下?”
A:当然能!类就像 “图纸”,比如 “汽车图纸” 规定了汽车有轮子、方向盘,能前进后退;对象就是根据图纸造出来的 “具体汽车”,比如你家那辆红色轿车,它有自己的颜色、型号,能实际开着跑。在 Objective-C 里,类是模板,对象是根据模板创建的具体实例。

类与对象的核心区别(新手必看)


概念作用例子代码中的体现
定义属性(特征)和方法(行为)的模板汽车图纸@interface Car : NSObject 声明的类
对象类的具体实例,有自己的属性值你家的红色轿车Car *myCar = [[Car alloc] init] 创建的对象

简单说,类是 “抽象的”,对象是 “具体的”。没有类就造不出对象,就像没有图纸造不出汽车一样。新手刚开始分不清很正常,多写两个例子就明白了。

二、类的声明与实现:Objective-C 的 “规矩”,两个文件要分清


Objective-C 定义类必须用两个文件:.h头文件(声明)和.m实现文件(具体代码),这是它的特色,也是新手容易迷糊的地方。

1. 头文件(.h):告诉别人 “这个类有啥”


头文件就像产品说明书,告诉其他代码这个类有哪些属性(特征)和方法(能做啥)。比如定义一个Person类的头文件Person.h
objective-c
// Person.h#import  // 导入基础框架// 声明Person类,继承自NSObject(所有类的根类)@interface Person : NSObject// 声明属性(特征):姓名和年龄@property (nonatomic, copy) NSString *name; // 姓名,用NSString类型@property (nonatomic, assign) int age; // 年龄,用int类型// 声明方法(行为):打招呼- (void)sayHello; // - 表示实例方法,void表示无返回值// 声明带参数的方法:介绍自己- (void)introduceWithHobby:(NSString *)hobby; // 参数是爱好@end

这里的@property是声明属性的关键字,nonatomic copy assign是属性修饰符,新手不用死记,先记住:字符串用copy,基本数据类型(int、float)用assign就行。

2. 实现文件(.m):告诉别人 “这个方法具体咋做”


实现文件是真正写方法代码的地方,比如Person.m
objective-c
// Person.m#import "Person.h" // 必须导入对应的头文件// 实现Person类@implementation Person// 实现sayHello方法- (void)sayHello {// self代表当前对象,访问自己的name属性NSLog(@"大家好,我叫%@!", self.name);}// 实现带参数的introduceWithHobby方法- (void)introduceWithHobby:(NSString *)hobby {NSLog(@"我叫%@,今年%d岁,喜欢%@。", self.name, self.age, hobby);}@end

避坑点:.m文件必须导入对应的.h文件,不然会报错 “Unknown type name 'Person'”。之前有学员忘导头文件,查了半小时才发现问题,这步千万别漏!

三、对象的创建与使用:从 “图纸” 到 “实物”,三步搞定


有了类,就能创建对象并使用了。创建对象就像按图纸造汽车,分三步: alloc(分配内存)→ init(初始化)→ 使用(调用属性和方法)。

1. 创建对象:固定格式,记住这行代码


objective-c
// 在main函数或其他地方创建Person对象Person *xiaoming = [[Person alloc] init];

这行代码的意思是:
  • [Person alloc]:给 Person 类分配内存空间(相当于买材料);
  • init:初始化对象(相当于组装成汽车);
  • Person *xiaoming:定义一个指向对象的指针(给汽车起个名字 “小明”)。

新手常问:“能不能简化?” 可以!后来简化成Person *xiaoming = [Person new];,效果一样,但建议刚开始用alloc init,更清楚过程。

2. 给属性赋值:对象的 “特征” 要具体


创建对象后,给它的属性赋值(就像给汽车涂颜色、装轮胎):
objective-c
// 给xiaoming的属性赋值xiaoming.name = @"小明"; // 姓名设为“小明”xiaoming.age = 20; // 年龄设为20

这里的.语法和其他语言类似,很好理解。注意字符串必须加@,写成@"小明",漏写 @会报错 “Expected expression”,新手十有八九会犯这个错。

3. 调用方法:让对象 “做事”,语法有点特殊


调用对象的方法必须用[对象 方法名]格式,这是 Objective-C 的特色,刚开始可能不习惯:
objective-c
// 调用无参数方法sayHello[xiaoming sayHello]; // 输出:大家好,我叫小明!// 调用带参数方法introduceWithHobby[xiaoming introduceWithHobby:@"打篮球"]; // 输出:我叫小明,今年20岁,喜欢打篮球。

Q:“为啥调用方法要用 []?直接写 xiaoming.sayHello () 不行吗?”
A:这是 Objective-C 从 Smalltalk 语言继承的语法,刚开始看着怪,用多了就顺了。就像用筷子吃饭,习惯就好。记住:调用方法必须用[对象 方法名:参数],参数多的话要按声明时的格式写。

四、方法调用的常见坑:新手最容易写错的 3 种情况


1. 带多个参数的方法,参数名别漏


Objective-C 的方法参数和其他语言不一样,参数名要写在方法名中间,比如声明一个计算长方形面积的方法:
objective-c
// 头文件声明- (int)calculateAreaWithWidth:(int)width andHeight:(int)height;// 实现文件- (int)calculateAreaWithWidth:(int)width andHeight:(int)height {return width * height;}// 调用时必须带参数名int area = [rect calculateAreaWithWidth:5 andHeight:3]; // 正确,返回15

避坑点:调用时不能省略参数名!写成[rect calculateAreaWithWidth:5, 3]会报错,必须按方法名:参数1 and参数名:参数2的格式写。

2. 方法名拼写错误,编译器不提醒


Objective-C 的方法名通常比较长,比如introduceWithHobby,拼写错一点编译器可能不直接报错,而是提示 “No visible @interface for 'Person' declares the selector 'introduceWithHobyy'”(注意 hobby 多写了个 y)。遇到这种错,先检查方法名拼写,特别是参数部分。

3. 忘记创建对象就调用方法


新手可能直接用类名调用实例方法,比如[Person sayHello],这会报错 “No known class method for selector'sayHello'”。记住:实例方法必须用对象调用,就像 “开车” 必须用具体的汽车,不能用图纸开车。

五、实战小练习:写个简单的 “计算器类”,巩固知识点


自己动手写代码才是最好的学习方式,咱来写个Calculator类练手:
  1. 头文件Calculator.h

objective-c
#import @interface Calculator : NSObject- (int)add:(int)a and:(int)b; // 加法- (int)subtract:(int)a from:(int)b; // 减法(b - a)@end

  1. 实现文件Calculator.m

objective-c
#import "Calculator.h"@implementation Calculator- (int)add:(int)a and:(int)b {return a + b;}- (int)subtract:(int)a from:(int)b {return b - a;}@end

  1. 调用代码:

objective-c
#import "Calculator.h"int main(int argc, const char * argv[]) {@autoreleasepool {Calculator *calc = [[Calculator alloc] init];int sum = [calc add:3 and:5];int diff = [calc subtract:2 from:10];NSLog(@"3+5=%d,10-2=%d", sum, diff); // 输出:3+5=8,10-2=8}return 0;}

写完运行一下,看看能不能得到正确结果。遇到报错别慌,对照前面的知识点排查,多试几次就熟了。

六、兔子哥的小建议:这样学类与对象更快


  1. 画图纸比喻法:每次写类之前,先在纸上画 “类的图纸”,列出它有哪些属性(比如汽车有颜色、速度)和方法(前进、刹车),再翻译成代码。
  2. 多敲少看:别光看教程不动手,Objective-C 的语法细节多,敲代码时才能发现问题(比如漏写 @、[]),比单纯看印象深 10 倍。
  3. 用 Xcode 的提示:Xcode 会自动提示方法名和参数,写[对象 方法名]时,输入[xiaoming in,它会提示introduceWithHobby:,跟着选不容易错。

兔子哥觉得,类与对象是 Objective-C 的 “灵魂”,刚开始觉得难,主要是语法格式不习惯。其实理解了 “类是模板,对象是实例” 这个核心,再通过代码练习熟悉@interface @implementation[]调用语法,很快就能上手。
很多新手卡在 “方法调用的格式” 上,其实不用怕写错,Xcode 的报错提示很清楚,跟着提示改就行。就像学写字,刚开始歪歪扭扭,写多了自然工整。
最后想说,编程没有捷径,类与对象的用法需要多写项目才能真正掌握。从简单的类开始,比如计算器、通讯录,慢慢增加复杂度,你会发现 Objective-C 的语法虽然特殊,但逻辑很清晰,用熟了甚至会觉得这种 “规矩” 很方便。现在就打开 Xcode,试试写今天的 Person 类吧!

标签: implementation 特立独行

上一篇当前分类已是最后一篇

下一篇objective-c在Xcode中编写第一个程序教程

发布评论 0条评论)

  • Refresh code

还木有评论哦,快来抢沙发吧~