张超超OC基础回顾01_类的创建,申明属性,以及本质
一、 类的声明和实现&规则
1.如何编写类的声明
以@interface开头 , 以@end结尾, 然后再class name对应的地方写上 事物名称, 也就是类名即可
注意: 类名的首字符必须大写
声明一个类的目的就是为了告诉系统, 我们这个类中有哪些属性和行为
OC类声明中属性只能在写@interface和@end之间的{}中
注意: 编写OC类属性的时, 建议将所有属性的名称前面都加上"_",这个是规范,记住就行了。
类名后面的 :NSObject 是为了让我们的Iphone类具备创建对象的能力(继承),也就是说,可以直接用[Iphone new];来创建一个新的对象,不然没有这个new这个类方法,因为new这个方法是存在于NSObject中的。
@interface Iphone : NSObject
@end
{ // 注意: 默认情况下, OC对象中的属性是不能直接访问的@public // 只要让类中的属性公开, 以后就可以直接通过一个指向结构体的指针来操作对象中的属性,真实写代码不这么做。float _model; // 型号 0int _cpu; // cup 0double _size; // 尺寸 0int _color; // 颜色 0 }// 对象方法
// 因为OC方法中的()有特殊的用途, OC方法中的()是用来扩住数据类型的,只要有数据类型就得用()来扩住,下面是不待参数,没有返回值的最简单的一个方法,"-"开头的是对象方法,"+"开头的是类方法 - (void)about;
// 有返回值没有参数的, 读取短信,会返回括号类型(字符串)的一个值 - (NSString *)loadMessage;// 有返回值有参数的, 打电话 // int signal(int number); // 注意: OC中的方法如果有参数, 那么每个参数的数据类型前面必须加上一个: // 注意: 当前这个有参数的方法它的方法名称是 signal: // 冒号也是方法名称的一部分 - (int)signal:(int)number;// 有返回值并且有多个参数的, 发短信 // int sendMessage(int number, char *content); // 下面这个方法的方法名称是 sendMessage:: //- (int)sendMessage:(int)number :(char *)content;// 为了提高我们的阅读性, OC方法允许我们给每个参数添加一个标签来说明当前参数的含义 // 注意: 标签也是方法名的一部分 // 方法名是 sendMessageWithNumber:andContent: - (int)sendMessageWithNumber:(int)number andContent:(char *)content;
// 类方法 // 如果定义类方法, 类方法的写法和对象方法一模一样, 除了前面的-号不同以外 只需要将对象方法的-号换成+, 那么就定义了一个类方法,类方法的实现效率要比对象方法高,所以如果该方法中没有用到类中的属性(成员变量)建议用类方法来节约性能。 + (int)sumWithValue1:(int)value1 andValue2:(int)value2;+ (void)demo;
总结:
注意: 如果声明的是对象方法那么就必须实现对象方法
如果声明的是类方法那么就必须实现类方法
类方法和对象方法的区别
0. 对象方法以-开头
类方法以+开头
1. 对象方法必须用对象调用
类方法必须用类来调用
2. 对象方法中可以直接访问属性(成员变量)
类方法中不可以直接访问属性(成员变量)
3. 类方法和对象方法可以进行相互调用
4.1对象方法中可以直接调用类方法
4.2类方法中间接调用对象方法 (注意: 不建议这样使用)
4.3类方法中可以直接调用其它类方法
4.4对象方法中可以直接调用对象方法
类方法的应用场景
如果方法中没有使用到属性(成员变量), 那么能用类方法就用类方法
类方法的执行效率比对象方法高
类方法一般用于定义工具方法:字符串查找,文件操作,数据库操作等等。。。
2.如何编写类的实现
以@implementation开头, 以@end结尾, 然后在class对应的地方写上声明时声明的类的名称, 必须和声明的类名一模一样
@implementation Iphone// 行为的实现,可以对象方法,可以类方法@end
如何通过一个类来创建对象
在OC中想要通过一个类来创建一个对象, 必须给类发送一个消息
如何发送消息? 在OC中只要想要发送消息就先写上 [类名称/对象名称 方法名称];
只要通过一个类调用类的new方法, 也就是给类发送一个叫做new的消息之后
系统内部就会做3件事情
1. 为Iphone类创建出来得对象分配存储空间
2. 初始化Iphone类创建出来的对象中的属性
3. 返回Iphone类创建出来的对象对应的地址
通过一个Iphone类型的指针接收了 Iphone对象的地址
如果使用给一个指针保存了某一个对象的地址, 那么我们就称这个指针位之为某个类型的对象(理解一下这句话)
利用Iphone类型的指针保存了Iphone对象的地址, 那么我们就称Iphone类型的指针p之为Iphone对象
// 1.创建对象// 每次给Iphone类发送一个new消息都会开辟一块新的存储空间// 也就意味着每次发送new消息创建出来的对象都是一个新的对象,彼此之间互不干涉的Iphone *p = [Iphone new];p->_color = kIColorWhite;p->_cpu = 1;p->_model = 4;p->_size = 3.5;// 2.给对象发送消息[p about];
OC中的类其实本质就是一个结构体, 所以p这个指针其实就是指向了一个结构体
struct Person {int age;char *name;};struct Person sp;struct Person *sip = &sp;(*sip).age = 30; // 改变指针只想的结构体中的值(*sip).name = "lnj";sip->age = 30;sip->name = "lnj";
转载于:https://www.cnblogs.com/XXxiaotaiyang/p/4983543.html
张超超OC基础回顾01_类的创建,申明属性,以及本质相关推荐
- oc基础 不可变字符串的创建和使用
oc基础 不可变字符串的创建和使用 简介:下面都是字符串基本用法. 1.字符串的创建 //创建oc常量字符串NSString *str=@"hello world!";NSLog ...
- OC基础语法(1)—类和对象OC基础语法…
01-第一个OC程序 // main.m #include #import #import "One.h" #import "Two.h" // OC和C语言 ...
- dataframe两个表合并_Part25:Pandas基础(Series,DataFrame类的创建、索引、切片、算术方法)...
一.为什么学习pandas numpy已经可以帮助我们进行数据的处理了,那么学习pandas的目的是什么呢? numpy能够帮助我们处理的是数值型的数据,当然在数据分析中除了数值型的数据还有好多其他类 ...
- 【Infragistics教程】在javascript类中添加静态成员属性
2019独角兽企业重金招聘Python工程师标准>>> [下载Infragistics Ultimate最新版本] 在一个javascript类中创建一个属性的需求,它需要被所有对象 ...
- 高阶Day1:面向对象,面向过程,类和对象的属性和方法创建
高阶Day1:面向对象,面向过程,类和对象的属性和方法创建 高级编程学习4个内容: 面向对象 MySQL数据库 网络编程 并发编程 面向过程(POP)与面向对象(OOP): 类和对象: 类名的定义: ...
- [黑马IOS自学第九篇]OC语言基础,面向对象概念,类的创建,OC多文件开发等
Extends Coc .EnhancedCc++/ .C-like c# 会在github上开源一个库,如果是私有库要交钱,自己o公司的项目不要勾 会把源代码提交上去 <span style= ...
- ios开发之OC基础-类和对象
ios开发之OC基础-类和对象 本系列的文章主要来自于个人在学习前锋教育-欧阳坚老师的iOS开发教程之OC语言教学视频所做的笔记,边看视频,边记录课程知识点.建议大家先过一遍视频,在看视频的过程中记录 ...
- [黑马IOS自学第十篇]OC语言基础,面向对象概念,类学习
一.类学习引入 //缺点 _result的结果一直在变化,得创建变量,在堆区一直申请空间 <span style="font-size:14px;">#import&l ...
- OC基础第四讲--字符串、数组、字典、集合的常用方法
OC基础第四讲--字符串.数组.字典.集合的常用方法 字符串.数组.字典.集合有可变和不可变之分.以字符串为例,不可变字符串本身值不能改变,必须要用相应类型来接收返回值:而可变字符串调用相应地方法后, ...
- OC基础回想(十二)协议
在OC基础(十一)中我们讨论了类别和非正式协议的奇异之处.在使用非正式协议时.能够仅仅实现你想要获得响应的方法.也不必在对象中声明不论什么内容来表示该对象可用作托付对象. 全部这些任务能够用最少的代码 ...
最新文章
- AI之最——地平线创始人兼CEO余凯谈AI
- 让Keras更酷一些:中间变量、权重滑动和安全生成器
- 如何正确地生成一个随机数
- LeetCode 152. 乘积最大子序列(DP)
- 漫话:如何给女朋友解释什么是BIO、NIO和AIO?
- suse linux修改ftp端口,suse Linux系统下的网络设置(ftp telnet xmanager)
- ​为什么你应该申请去小型的初创公司实习?
- mysql 多个网卡_seriver -- 多个网卡只能认到一个网卡的解决方法
- U盘的文件夹变成快捷方式,原来是这个病毒在作祟hypertrm.exe
- 微信群发可以分组吗?群组标签分组设置
- Python输入关键词批量得到电商商品信息
- 数据库增删改查的基本操作和SpringBoot创建
- 上海租房住房公积金提取
- 用PS给证件照排版教程
- 2021华为杯D题详细讲解:抗乳腺癌候选药物的优化建模
- C++11智能指针(unique_ptr、shared_ptr、weak_ptr)boost::scoped_ptr
- 34万奖金!第三届厦门国际银行数创金融杯金融营销大赛来啦!
- 2021年中国皮革行业现状分析:销售收入同比增长8.4%[图]
- 像素工厂如何显示服务器列表,萌新如何快速解锁像素工厂炮台科技
- 计算机考研英语几,难度,2021考研:计算机考研难度排行榜