1.OC类
一.基础语法
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类的更多相关文章
- OC 类簇与复合
OC 类簇与复合 类簇: 类簇是Foundation框架中广泛使用的设计模式.类簇将一些私有的.具体的子类组合在一个公共的.抽象的超类下面,以这种方法来组织类可以简化一个面向对象框架的公开架构,而又不 ...
- 第一个OC类、解析第一个OC程序
01第一个OC 类 本文目录 • 一.语法简介 • 二.用Xcode创建第一个OC的类 • 三.第一个类的代码解析 • 四.添加成员变量 • 五.添加方法 • 六.跟Java的比较 • 七.创建对象 ...
- Objective-c 总结(一):OC类的设计
(一)学习目标: 1.面向对象基本概念: OOP的主要思想是把构成问题的各个事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描述一个事物在整个解决问题步骤中的行为. 2.熟悉OC类的定 ...
- OC学习那些事:第一个OC类
一.创建一个新的OC类: 1.点击File->New File,打开Choose a template for your new file窗口,选择Objective-C class,点击Nex ...
- iOS学习10之OC类和对象
本次是OC的第一节课,主要是学习和理解类与对象 1.面向对象 1> OOP(Object Oriented Programming)面向对象编程. 面向对象以事物为中心,完成某件事情都需要哪些事 ...
- [Objective-c 基础 - 1.1] OC类
Obj-C中没有包得概念,使用前缀进行区分 自带类用NS开头命名 关键字使用@开头 A. 第一个OC程序 1. 导入Foundation框架的主头文件 #import <Foundation ...
- 向OC类中添加默认的协议实现(ProtocolKit)
以forkingdog的PorotocolKit举例 举例 ProtocolKit Protocol extension for Objective-C Usage Your protocol: @p ...
- 【IOS学习基础】OC类的相关
几天前突然在别人的类的.m文件中看到这么一句代码:@synthesize xxxx = _xxxx; 当时愣是没理解啥意思,过后才缓过神来发现原来是把一些类的基础知识忘记了,虽然不用过多去深究以前的一 ...
- OC——类
1.Objective-C是C语言的超集,完全兼容C语言 2.所有的关键字都以“@”开头,例如:@interface,@class,@implementation 3.Objective-C的所有对象 ...
- 04:第一个OC类
1.类与对象的关系 面向对象的核心就是对象,那怎么创建对象? OC中创建对象比较复杂, 首先要理解一个概念叫做类. 现实生活中是根据一份描述,一份模板创建对象,编程语言也一样,也必须先有一份描述,在这 ...
随机推荐
- C# Aforge设置摄像头视频属性和控制属性
修改后的代码:github 一.调用windows自身摄像头属性设置窗口 使用VideoCaptureDevice对象的DisplayPropertyPage(IntPtr parentWindow) ...
- HTML的发展历史
HTML是Web统一语言,这些容纳在尖括号里的简单标签,构成了如今的Web,1991年,Tim Berners-Lee编写了一份叫做“HTML标签”的文档,里面包含了大约20个用来标记网页的HTML标 ...
- ChibiOS/RT移植到STM32F407
官网地址:http://www.chibios.org/dokuwiki/doku.php 下载源码 找到STM32F407的demos程序(chibios\demos\STM32\RT-STM32F ...
- 【JUC】1.线程
先复习一下线程的东西: Java线程的内存模型 主内存与工作内存 Java内存模型主要定义了程序中各个变量的访问规则 所有的变量都在主内存,Java堆(线程共享) 每条线程都有自己的工作内存,虚拟机栈 ...
- c# 接口使用
- JS函数篇【2】
什么是函数 函数的作用,可以写一次代码,然后反复地重用这个代码. <h3 onload="add2(1,2,3);add3(4,5,6)"></h3> &l ...
- RT-Thread--内存管理
内存管理的功能特点 RT-Thread 操作系统在内存管理上,根据上层应用及系统资源的不同,有针对性地提供了不同的内存分配管理算法.总体上可分为两类:内存堆管理与内存池管理,而内存堆管理又根据具体内存 ...
- CentOS6和7启动流程
CentOS6启动流程 https://linux.cn/article-8807-1.html BIOS 开机自检,硬件自检 MBR MBR磁盘分区是一种使用最为广泛的分区结构,它也被称为DOS分区 ...
- 进程、requests模块的简单使用
一.进程 1.进程间数据不共享 import multiprocessing data_list = [] def task(arg): data_list.append(arg) print(dat ...
- java.sql.SQLException: The server time zone value '�й���ʱ��' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver
SpringBoot运行报错——java.sql.SQLException: The server time zone value '�й���ʱ��' is unrecognized or rep ...