构造方法:用来初始化对象的方法,是个对象方法,-开头。构造方法其实就是将对象初始化的方法。以前对象的初始化都用[Person new];这里面的new方法太固定,耦合性太强,有时候没办法满足需求。其实new方法里面融合了alloc方法和init方法。实际上是[[Person alloc] init];alloc是类方法,目的是分配存储空间,init是对象方法,用来初始化对象的。

重写构造方法的目的:为了让对象创建出来,成员变量就会有一些固定的值。

重写构造方法的注意点:
      1.先调用父类的构造方法([super init])

2.再进行子类内部成员变量的初始化
Person.h文件

 #import <Foundation/Foundation.h>@interface Person : NSObject
@property(nonatomic,assign) int age;
@end

Person.m文件

  #import "Person.h"
@implementation Person- (id)init
{if ( self = [super init] ){ // 初始化成功_age = 10;}// 3.返回一个已经初始化完毕的对象return self;
}@end

main.m文件

#import <Foundation/Foundation.h>
#import "Person.h"
#import "Student.h"int main()
{Person *p = [[Person alloc] init];return 0;
}

此时经过重写init方法后,_age初始值就为10.

 重写-init方法
- (id)init{// 1.一定要调用回super的init方法:初始化父类中声明的一些成员变量和其他属性self = [super init]; // 当前对象 self// 2.如果对象初始化成功,才有必要进行接下来的初始化if (self != nil){ // 初始化成功_age = 10;}// 3.返回一个已经初始化完毕的对象return self;}

自定义构造方法:在对象初始化的时候,传一些参数,让成员变量值随着变化。
自定义构造方法的规范:
  1.一定是对象方法,一定以 - 开头
  2.返回值一般是id类型
  3.方法名一般以initWith开头,比如:

<span style="font-size:24px;">- (id)initWithName:(NSString *)name;- (id)initWithAge:(int)age;- (id)initWithName:(NSString *)name andAge:(int)age;</span>

在对象初始化调用init方法时,传一些参数。

Student *p = [[Student alloc] initWithName:@"Jim" andAge:29 ;

在.m文件中对自定义的构造方法进行实现

#import “Student.h”@implementation Student- (id)initWithName:(NSString *)name andAge:(int)age
{if ( self = [super init] ) //如果当前对象初始化成功,即self!= nil;{_name = name;_age = age;}return self;
}@end

main.m中,对象p初始化的时候传一些参数,此时成员变量就是传的参数值。

#import <Foundation/Foundation.h>
#import "Student.h"int main()
{@autoreleasepool {Student *p = [[Student alloc] initWithName:@"Jim" andAge:29 andNo:10];}return 0;
}

分类-Category:
1.基本用途
如何在不改变原来类模型的前提下,给类扩充一些方法?有2种方式
继承
分类(Category)继承和分类有一些相似处,也有本质的区别。
2.格式
分类的声明:
@interface 类名 (分类名称)
// 方法声明
@end
分类的实现
@implementation 类名 (分类名称)
// 方法实现
@end

分类名写在原来类的右边,并且用小括号括住,只要是小括号括住的类名,一定是分类,固定格式.

NSString+Number.h文件

#import <Foundation/Foundation.h>@interface NSString (Number)+ (int)numberCountOfString:(NSString *)str;- (int)numberCount;@end

NSString+Number.m文件

<span style="font-size:24px;">#import "NSString+Number.h"@implementation NSString (Number)+ (int)numberCountOfString:(NSString *)str
{return [str numberCount];
}- (int)numberCount
{int count = 0;for (int i = 0; i<self.length; i++){// 取出i这个位置对应的字符unichar c = [self characterAtIndex:i];// 如果这个字符是阿拉伯数字if ( c>='0' && c<='9' ){count++;}}return count;
}@end</span><span style="font-size:18px;">
</span>

main .m文件

<span style="font-size:24px;">#import <Foundation/Foundation.h>
#import "NSString+Number.h"int main(){int count = [@"9fdsfds543543" numberCount];NSLog(@"%d", count);return 0;
}</span><span style="font-size:18px;">
</span>
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);font-size:24px;">3.</span><span style="font-size:24px;"><span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">好处</span>:</span>
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);font-size:24px;">一个庞大的类可以分模块开发</span>

一个庞大的类可以由多个人来编写,更有利于团队合作

4.分类的使用注意:
Category可以访问原始类的实例变量,但不能添加变量,只能添加方法。如果想添加变量,可以考虑通过继承创建子类
Category可以实现原始类的方法,但不推荐这么做,因为它是直接替换掉原来的方法,这么做的后果是再也不能访问原来的方法
多个Category中如果实现了相同的方法,只有最后一个参与编译的才会有效

黑马程序员之ios学习总结——10 OC语言的构造方法和分类相关推荐

  1. 黑马程序员_java自学学习笔记(八)----网络编程

    黑马程序员_java自学学习笔记(八)----网络编程 android培训. java培训.期待与您交流! 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无 ...

  2. 黑马程序员Java教程学习笔记(五)

    学习视频:https://www.bilibili.com/video/BV1Cv411372m 如侵权,请私信联系本人删除 文章目录 黑马程序员Java教程学习笔记(五) 日期时间:Date.Sim ...

  3. 黑马程序员Java教程学习笔记(三)

    学习视频:https://www.bilibili.com/video/BV1Cv411372m 如侵权,请私信联系本人删除 文章目录 黑马程序员Java教程学习笔记(三) 面向对象:设计对象.注意事 ...

  4. 【黑马程序员新版Linux学习笔记】Linux系统实用操作命令——操作演示

    [黑马程序员新版Linux学习笔记]Linux 零基础快速入门: (一)Linux基本命令--操作演示 (二)Linux用户和权限 -- 操作演示 (三)Linux 小技巧快捷键 (四)Linux系统 ...

  5. 黑马程序员 c++视频学习详细笔记 下载地址

    黑马程序员 c++视频学习详细笔记 下载地址: https://download.csdn.net/download/m0_47891203/84348174 建议结合博主博文学习

  6. 跟着黑马程序员pink老师学习的笔记及小破站学习的笔记

    网页 1.网站是指在因特网上根据一定的规则,使用HTML等制作的用于展示特定内容相关的网页集合 2.什么是网页? 网页是网站中的一"页",通常是HTML格式的文件,它要通过浏览器来 ...

  7. 基于VueAxios制作音乐播放器(bilibili黑马程序员Vue入门学习记录)

    目录 使用Vue制作一个音乐播放器 前言 Vue Vue导入 Vue挂载 Vue指令 v-text v-html v-on v-show v-if v-bind v-for v-model axios ...

  8. Java开发程序员最值得学习的10大技术

    作为一个开发人员,我们最大的挑战就是保持自己了解新的技术.技术变化很快,你大概每两年就会看到一个新版本的编程语言和框架. 就拿2017年来说,AR.VR.区块链.人工智能等等已经扑面而来了.除了这些离 ...

  9. Java程序员最值得学习的10大技术

    程序员们是最具有挑战性的工作,我们最大的挑战就是保持自己了解新的技术.技术变化很快,你大概每两年就会看到一个新版本的编程语言和框架. 就拿2017年来说,AR.VR.区块链.人工智能等等已经扑面而来了 ...

最新文章

  1. String.hashCode 哈希值出现重复?
  2. 如何去除矩阵中的NaN元素
  3. 【DirectX12】4.用FBX_SDK读取网格数据
  4. Android 开源项目android-open-project工具库解析之(一) 依赖注入,图片缓存,网络相关,数据库orm工具包,Android公共库...
  5. chgrp和chown命令
  6. oracle job 定时执行参数
  7. python要背的单词_Python-默背单词
  8. 2019年Java程序设计讲课笔记目录
  9. c# 程序调试出现“未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序。”...
  10. Sparsity and Some Basics of L1 Regularization
  11. Depends简介与使用说明
  12. 如何用电子书来做网络营销
  13. 首次登录Navicat连接数据库遇到的问题
  14. 企业微信打卡怎么防止作弊?看看其他企业是怎么做的
  15. Android 8.0 状态栏信号显示、信号定制
  16. 量化对冲:智能对冲策略解析
  17. Hadoop Day1
  18. ROS学习(一)ROS Noetic安装及环境配置
  19. 全国人口净流入城市排名2020_2019年长三角各城市常住人口、城镇化分布:苏宁杭净流入超200万...
  20. [易飞]累计组成用量=组成用量/(底数*标准用量)

热门文章

  1. 采集英语站-免费采集外贸英语站的软件
  2. ad账户与linux集成,Ubuntu 通过ldap集成AD账号登录(nslcd方式)
  3. 2022安全员-C证试题模拟考试平台操作
  4. 使用opencv打开笔记本摄像头
  5. STC15W408AS的485串口实现自发自收
  6. 学计算机得肩周炎,肩周炎的拔罐疗法
  7. delphi7解决“多步操作产生错误,请检查每一步的状态”的办法
  8. 锁存器Latch和触发器Flip-flop的区别
  9. 设计,看上去很美 wayfarer
  10. 系统的数据一致性到底是在说什么?我到今天才算真明白了