一、 类的声明和实现&规则

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_类的创建,申明属性,以及本质相关推荐

  1. oc基础 不可变字符串的创建和使用

    oc基础  不可变字符串的创建和使用 简介:下面都是字符串基本用法. 1.字符串的创建 //创建oc常量字符串NSString *str=@"hello world!";NSLog ...

  2. OC基础语法(1)—类和对象OC基础语法…

    01-第一个OC程序 //  main.m #include #import #import "One.h" #import "Two.h" // OC和C语言 ...

  3. dataframe两个表合并_Part25:Pandas基础(Series,DataFrame类的创建、索引、切片、算术方法)...

    一.为什么学习pandas numpy已经可以帮助我们进行数据的处理了,那么学习pandas的目的是什么呢? numpy能够帮助我们处理的是数值型的数据,当然在数据分析中除了数值型的数据还有好多其他类 ...

  4. 【Infragistics教程】在javascript类中添加静态成员属性

    2019独角兽企业重金招聘Python工程师标准>>> [下载Infragistics Ultimate最新版本] 在一个javascript类中创建一个属性的需求,它需要被所有对象 ...

  5. 高阶Day1:面向对象,面向过程,类和对象的属性和方法创建

    高阶Day1:面向对象,面向过程,类和对象的属性和方法创建 高级编程学习4个内容: 面向对象 MySQL数据库 网络编程 并发编程 面向过程(POP)与面向对象(OOP): 类和对象: 类名的定义: ...

  6. [黑马IOS自学第九篇]OC语言基础,面向对象概念,类的创建,OC多文件开发等

    Extends Coc .EnhancedCc++/ .C-like c# 会在github上开源一个库,如果是私有库要交钱,自己o公司的项目不要勾 会把源代码提交上去 <span style= ...

  7. ios开发之OC基础-类和对象

    ios开发之OC基础-类和对象 本系列的文章主要来自于个人在学习前锋教育-欧阳坚老师的iOS开发教程之OC语言教学视频所做的笔记,边看视频,边记录课程知识点.建议大家先过一遍视频,在看视频的过程中记录 ...

  8. [黑马IOS自学第十篇]OC语言基础,面向对象概念,类学习

    一.类学习引入 //缺点 _result的结果一直在变化,得创建变量,在堆区一直申请空间 <span style="font-size:14px;">#import&l ...

  9. OC基础第四讲--字符串、数组、字典、集合的常用方法

    OC基础第四讲--字符串.数组.字典.集合的常用方法 字符串.数组.字典.集合有可变和不可变之分.以字符串为例,不可变字符串本身值不能改变,必须要用相应类型来接收返回值:而可变字符串调用相应地方法后, ...

  10. OC基础回想(十二)协议

    在OC基础(十一)中我们讨论了类别和非正式协议的奇异之处.在使用非正式协议时.能够仅仅实现你想要获得响应的方法.也不必在对象中声明不论什么内容来表示该对象可用作托付对象. 全部这些任务能够用最少的代码 ...

最新文章

  1. AI之最——地平线创始人兼CEO余凯谈AI
  2. 让Keras更酷一些:中间变量、权重滑动和安全生成器
  3. 如何正确地生成一个随机数
  4. LeetCode 152. 乘积最大子序列(DP)
  5. 漫话:如何给女朋友解释什么是BIO、NIO和AIO?
  6. suse linux修改ftp端口,suse Linux系统下的网络设置(ftp telnet xmanager)
  7. ​为什么你应该申请去小型的初创公司实习?
  8. mysql 多个网卡_seriver -- 多个网卡只能认到一个网卡的解决方法
  9. U盘的文件夹变成快捷方式,原来是这个病毒在作祟hypertrm.exe
  10. 微信群发可以分组吗?群组标签分组设置
  11. Python输入关键词批量得到电商商品信息
  12. 数据库增删改查的基本操作和SpringBoot创建
  13. 上海租房住房公积金提取
  14. 用PS给证件照排版教程
  15. 2021华为杯D题详细讲解:抗乳腺癌候选药物的优化建模
  16. C++11智能指针(unique_ptr、shared_ptr、weak_ptr)boost::scoped_ptr
  17. 34万奖金!第三届厦门国际银行数创金融杯金融营销大赛来啦!
  18. 2021年中国皮革行业现状分析:销售收入同比增长8.4%[图]
  19. 像素工厂如何显示服务器列表,萌新如何快速解锁像素工厂炮台科技
  20. 计算机考研英语几,难度,2021考研:计算机考研难度排行榜

热门文章

  1. 教你如何在Linux中通过expect工具实现脚本的自动交互
  2. IT人喝酒不同岗位不同姿态,最服运维!
  3. 如果生个儿子,一定得教他打篮球。
  4. 高并发架构系列:分布式锁的由来、特点及Redis分布式锁的实现详解
  5. 【WEB基础】HTML CSS 基础入门(2)选取工具:VS2019安装使用
  6. 结构体内存对齐的原则及原理
  7. PHP compact函数
  8. PHP线程安全和非线程安全有什么区别
  9. Java:多线程之生产者与消费者
  10. 楼市新政催生“金十月” 二手房改善需求变成交主力