一.基础语法

1.在OC中,一般用2个文件来描述一个类:

1> .h:类的声明文件,用于声明成员变量、方法。类的声明使用关键字@interface和@end。

注意:.h中的方法只是做一个声明,并不对方法进行实现。也就是说,只是说明一下方法名、方法的返回值类型、方法接收的参数类型而已,并不会编写方法内部的代码。

2> .m:类的实现文件,用于实现.h中声明的方法。类的实现使用关键字@implementation和@end。

2.方法

1> 方法的声明和实现,都必须以 + 或者 - 开头

  • + 表示类方法(静态方法)
  • - 表示对象方法(动态方法)

2> 在.h中声明的所有方法作用域都是public类型,不能更改

二.用 XCode创建类

1.选择Cocoa的"Objective-C class"

2.输入类名和选择父类

3.创建完毕后,项目中多了两个文件

* Student.h是类的声明文件,Student.m是类的实现文件

* 默认情况下,这2个文件的文件名跟类名一致

* 编译器只会编译.m文件,并不会编译.h文件

三.写第一个类

1.Student.h - 类的声明文件

 #import <Foundation/Foundation.h>

 @interface Student : NSObject

 @end

1> 看第3行,OC中使用关键字@interface来声明一个类,@interface后面紧跟着类名Student。

2> 类名Student后面的冒号":"表示继承,即第3行代码的意思是Student继承自NSObject。

3> 因为NSObject被声明在Foundation.h中,所以在第1行用#import包含了Foundation.h文件。

4> 第5行的@end表示类的声明结束了。@interface和@end是配套使用的。

2.Student.m - 类的实现文件

 #import "Student.h"

 @implementation Student

 @end

1> 看第3行,OC中使用关键字@implementation来实现一个类。@implementation后面紧跟的类名,表示究竟要实现哪一个类。

2> 因为Student这个类是声明在Student.h中的,所以在第1行用#import包含了Student.h文件。如果你不包含Student.h,第3行代码肯定报错,因为它根本不知道Student是个什么鬼东西。

3> 第5行的@end表示类的实现结束了。@implementation和@end是配套使用的。

四.添加成员以及添加方法

正常情况下,我们都是把成员变量定义在头文件中,也就是类的声明文件(.h)中

#import <Foundation/Foundation.h>

@interface Student : NSObject {
int age; // 年龄
} @end

  

1> 第4行定义了一个int类型的成员变量age,age的默认作用域是@protected,即可以在Student类内部和子类中访问

2> 成员变量必须写在大括号{ }里面

五.main中实现方法

前面我们定义了一个成员变量age,它的作用域是@protected,外界不能直接访问它。为了保证面向对象数据的封装性,我们可以提供age的get方法和set方法,让外界间接访问age。接下来在Student中添加age的get方法和set方法。

1.在Student.h中声明方法

#import <Foundation/Foundation.h>

@interface Student : NSObject {
int age; // 年龄 @public
int no; // 学号
int score; // 成绩 @protected
float height; // 身高 @private
float weight; // 体重
} // age的get方法
- (int)age; // age的set方法
- (void)setAge:(int)newAge; @end

1> 第18行声明了age的get方法,方法名就叫做age,OC建议get方法的名字跟成员变量保持一致(如果是在Java中,就应该叫做getAge)

2> 第18行最面的 - 表示这是一个动态方法( + 则表示静态方法)。age前面的(int)表示方法的返回值为int类型,方法的返回值和参数类型都需要用小括号()包住

3> 第21行声明了age的set方法,前面的 - 表示动态方法,(void)表示方法没有返回值

4> 在OC方法中,一个冒号:对应一个参数。由于第21行age的set方法接收一个int类型的参数,参数名为newAge,所以(int)newAge前面有一个冒号:

5> 一定要记住:一个冒号:对应一个参数,而且冒号:也是方法名的一部分。因此第21行set方法的方法名是setAge:,而不是setAge

再加大一下难度,假如增加一个方法可以同时设置age和height,那么就应该这样写:

1 - (void)setAge:(int)newAge andHeight:(float)newHeight;

* 这个方法是动态方法、没有返回值,接收2个参数,所以有2个冒号:

* 这个方法的方法名是setAge:andHeight:

* 其实andHeight是可以省略的,它只是为了让方法名念起来通顺一点,也让(float)newHeight前面的冒号:不那么孤单

2.在Student.m中实现方法

#import "Student.h"

@implementation Student

// age的get方法
- (int)age {
// 直接返回成员变量age
return age;
} // age的set方法
- (void)setAge:(int)newAge {
// 将参数newAge赋值给成员变量age
age = newAge;
} // 同时设置age和height
- (void)setAge:(int)newAge andHeight:(float)newHeight {
age = newAge;
height = newHeight;
}
@end

第6行对age方法进行了实现,第12行对setAge:方法进行了实现,第18行对setAge:andHeight:方法进行了实现

六.创建对象

#import <Foundation/Foundation.h>
#import "Student.h" int main(int argc, const char * argv[])
{
@autoreleasepool {
Student *stu = [[Student alloc] init]; [stu release];
}
return ;
}

---------------------------------

这样记笔记比较浪费时间,以后改为

1.blog链接

2.简述本科学习内容

3. 问题回答

1.OC类的更多相关文章

  1. OC 类簇与复合

    OC 类簇与复合 类簇: 类簇是Foundation框架中广泛使用的设计模式.类簇将一些私有的.具体的子类组合在一个公共的.抽象的超类下面,以这种方法来组织类可以简化一个面向对象框架的公开架构,而又不 ...

  2. 第一个OC类、解析第一个OC程序

    01第一个OC 类 本文目录 • 一.语法简介 • 二.用Xcode创建第一个OC的类 • 三.第一个类的代码解析 • 四.添加成员变量 • 五.添加方法 • 六.跟Java的比较 • 七.创建对象 ...

  3. Objective-c 总结(一):OC类的设计

    (一)学习目标: 1.面向对象基本概念: OOP的主要思想是把构成问题的各个事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描述一个事物在整个解决问题步骤中的行为. 2.熟悉OC类的定 ...

  4. OC学习那些事:第一个OC类

    一.创建一个新的OC类: 1.点击File->New File,打开Choose a template for your new file窗口,选择Objective-C class,点击Nex ...

  5. iOS学习10之OC类和对象

    本次是OC的第一节课,主要是学习和理解类与对象 1.面向对象 1> OOP(Object Oriented Programming)面向对象编程. 面向对象以事物为中心,完成某件事情都需要哪些事 ...

  6. [Objective-c 基础 - 1.1] OC类

    Obj-C中没有包得概念,使用前缀进行区分 自带类用NS开头命名 关键字使用@开头   A. 第一个OC程序 1. 导入Foundation框架的主头文件 #import <Foundation ...

  7. 向OC类中添加默认的协议实现(ProtocolKit)

    以forkingdog的PorotocolKit举例 举例 ProtocolKit Protocol extension for Objective-C Usage Your protocol: @p ...

  8. 【IOS学习基础】OC类的相关

    几天前突然在别人的类的.m文件中看到这么一句代码:@synthesize xxxx = _xxxx; 当时愣是没理解啥意思,过后才缓过神来发现原来是把一些类的基础知识忘记了,虽然不用过多去深究以前的一 ...

  9. OC——类

    1.Objective-C是C语言的超集,完全兼容C语言 2.所有的关键字都以“@”开头,例如:@interface,@class,@implementation 3.Objective-C的所有对象 ...

  10. 04:第一个OC类

    1.类与对象的关系 面向对象的核心就是对象,那怎么创建对象? OC中创建对象比较复杂, 首先要理解一个概念叫做类. 现实生活中是根据一份描述,一份模板创建对象,编程语言也一样,也必须先有一份描述,在这 ...

随机推荐

  1. vue npm run build 失败

    之前删除过 node-moudel 文件夹,然后 npm install 重新安装,一切OK.打包的时候,报错,找不到caniuse什么的.再删除node-moudel,重新cnpm install ...

  2. 快速批量删除 docker 镜像或容器

    原文:快速批量删除 docker 镜像或容器 点击在我的博客 xuxusheng.com 中查看,有更好的排版哦~ docker 本身并没有提供批量删除的功能,当有大量的镜像或者容器需要删除的时候,手 ...

  3. Asp.Net 加载不同项目程序集

    我们做项目时有时候不想添加别的项目的引用,但是那个项目又必须在 Global 中进行注册 最常见的就是插件机制,参考: https://shazwazza.com/post/Developing-a- ...

  4. EntityFramework进阶(三)- 根据IQueryable获取DbContext

    本系列原创博客代码已在EntityFramework6.0.0测试通过,转载请标明出处 有时候我们要通过IQueryable获取所在的DbContext信息,这是完全可以的. 以下代码从个人开源框架中 ...

  5. unittest 运行slenium(二)---打开浏览器及元素操作

    一: 打开win10中安装的浏览器 1. 打开的浏览器有:谷歌/火狐/ie/edge 2. 当浏览器的driver没有配置在path环境下时,在启动浏览器时需要传入driver的所在位置 3. 其中火 ...

  6. 前端自己导出Excel

    1.导出当前页面,这是最简单的,只是导出当前页面的数据. exportData(tableid, name) { let table; let uri = 'data:application/vnd. ...

  7. Python 渗透测试编程技术方法与实践 ------全书整理

    1.整个渗透测试的工作阶段 ( 1 )前期与客户的交流阶段.( 2 )情报的收集阶段.( 3 )威胁建模阶段.( 4 )漏洞分析阶段.( 5 )漏洞利用阶段.( 6 )后渗透攻击阶段.( 7 )报告阶 ...

  8. Java面试题及答案解析

    面向对象编程(OOP) Java是一个支持并发.基于类和面向对象的计算机编程语言.下面列出了面向对象软件开发的优点: 代码开发模块化,更易维护和修改. 代码复用. 增强代码的可靠性和灵活性. 增加代码 ...

  9. erase & remove_if 合用

    words_.erase( remove_if( words_.begin(), words_.end(), [&](const entry& e) { return (e.type ...

  10. javascript常用工具类util.js

    //如果大家想要补充,请留言 /** * 判断指定名称的复选框是否被选中 * * @param {} * chname复选框名称 */ function chkCheckCha(chname) { v ...