黑马程序员——OC---OC特有语法02

VMware Workstation Pro 17 高效安装与激活指南 本文详细介绍了VMware Workstation Pro 17的高效安装与激活方法,包括系统要求、安装步骤、常见问题解决方案及性能优化技巧。通过专业的指导,帮助用户快速掌握这款强大的虚拟机软件,提升工作效率。 阅读详情

Class c = [Person class];
Person *p2 = [c new];

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

一 分类

1 什么分类?

有的时候,我们需要对原有的类添加一些功能(方法)作为源类扩展,他的功能是扩展类的能力。这种情况下,OC提供了一种完成上述扩展的机制,就是分类。

使用分类,一个庞大的类可以分模块开发,也可以由多个人来编写,更有利于团队合作。

2 分类的语法

@interface 类名 (分类名称)

// 方法声明

@end

Ø   分类的实现

@implementation类名 (分类名称)

// 方法实现

@end

3 分类使用的注意事项

1>Category可以访问原始类的实例变量,但不能添加变量,只能添加方法。如果想添加变量,可以考虑通过继承创建子类

2>Category可以实现原始类的方法,但不推荐这么做,因为它是直接替换掉原来的方法,这么做的后果是再也不能访问原来的方法

3>一个类,可以拥有多个分类

4>多个Category中如果实现了相同的方法,只有最后一个参与编译的才会有效

5>记住,通过分类添加新的方法来扩展该类,不仅仅会影响该类,还会影响该类所有的子类,因此他的所有的子类都会继承这个分类,而不管这些子类愿意不愿意。

下面代码实现给NSString增加一个类方法:计算某个字符串中阿拉伯数字的个数和给NSString增加一个对象方法:计算当前字符串中阿拉伯数字的个数的工能:

//  NSString+Number.h

#import <Foundation/Foundation.h>

@interface NSString (Number)

+ (int)numberCountOfString:(NSString *)str;

- (int)numberCount;

@end

#import "NSString+Number.h"

@implementation NSString (Number)

+ (int)numberCountOfString:(NSString *)str
{
    // 1.定义变量计算数字的个数
//    int count = 0;
//    
//    for (int i = 0; i<str.length; i++)
//    {
//        unichar c = [str characterAtIndex:i];
//        
//        if ( c>='0' && c<='9')
//        {
//            count++;
//        }
//    }
//    return count;
    
    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
二 类的本质

类也是一个对象,是Class类型的对象,简称“类对象”,类名就代表着类对象,每个类只有一个类对象。Class类型的定义如下

typedef struct objc_class *Class;

+load方法和+initialize方法

在程序启动的时候会加载所有的类和分类,并调用所有类和分类的+load方法。因为先加载父类,再加载子类,也就是先调用父类的+load,再调用子类的+load;先加载原始类,再加载分类。并且不管程序运行过程有没有用到这个类,都会调用+load加载。

在第一次使用某个类时(比如创建对象等),就会调用一次+initialize方法,一个类只会调用一次+initialize方法,先调用父类的,再调用子类的。

我们可以有一下两种方式获取类对象:

Class c = [Person class]; // 类方法
//另一种方式
Person *p = [Person new];
Class c2 = [p class]; // 对象方法
通过一下方式进行类对象的调用:
Class c = [Person class];
Person *p2 = [c new];

三 description方法

默认情况下,利用NSLog和%@输出对象时,结果是:<类名:内存地址>,这是因为当使用NSLog和%@时自动会调用对象p的-description方法,拿到-description方法的返回值(NSString *)显示到屏幕上而,-description方法默认返回的是“类名+内存地址”。所以我们可以重写-description或者+description方法达到修改NSLog的默认输出的目的。

特别注意的是,如果在-description方法中使用NSLog打印self,会出现死循环。

下面代码是对description方法进行重写的一个实例:

#import "Person.h"

@implementation Person

- (NSString *)description
{

   return [NSString stringWithFormat:@"age=%d, name=%@", _age, _name];
}

// 决定了类对象的输出结果
+ (NSString *)description
{
    return @"Abc";
}

@end
四 SEL

SEL是对方法的一种包装,将方法包装成一个SEL类型的数据,去寻找对应的方法地址,找到方法地址后就可以调用方法。也就是说SEL可以代替方法,每个方法有方法名,ID,地址,相同的方法名,ID也一样,正常情况下我们根据方法名找到方法,用SEL方法可以根据ID找到方法。
SEL对象的创建如下方式

SEL s = @selector(test);
SEL s2 = NSSelectorFromString(@"test");
SEL对象的其他用法

// 将SEL对象转为NSString对象
NSString *str = NSStringFromSelector(@selector(test));

Person *p = [Person new];
// 调用对象p的test方法
[p performSelector:@selector(test)];
五 关于NSLog输出

1  __FILE__ :源代码文件名

2  __LINE__ :NSLog代码在第几行

3  _cmd :代表着当前方法的SEL

注意,如下代码会引发死循环

- (void)test {
    [self performSelector:_cmd];
}








STM32F407串口DMA收发实战:标准库配置与环形缓冲区实现 DMA(直接存储器访问)是嵌入式系统中提升数据传输效率的核心技术,它允许外设与内存直接交换数据而无需CPU干预。其工作原理是通过专用硬件控制器接管数据搬运任务,CPU仅需初始化传输参数即可处理其他事务,从而显著降低系统负载。这项技术的核心价值在于释放CPU算力,实现高吞吐、低延迟的实时通信,尤其适用于数据采集、工业控制和通信网关等场景。在STM32F407等ARM Cortex-M4芯片中,串口结合DMA可实现稳定的高速数据流处理。本文以STM32F407标准库为基础,深入解析USART1的DMA发送与接收 阅读详情

相关推荐

WPF毛玻璃效果别再写C#代码了!纯XAML用Border+VisualBrush+BlurEffect三步搞定

本文详细介绍了如何在WPF中通过纯XAML实现毛玻璃效果,无需编写C#代码。通过VisualBrush、BlurEffect和Clip的黄金组合,开发者可以快速创建专业级的毛玻璃面板,提升UI的现代感和视觉层次。文章还提供了性能优化技巧和实战案例,帮助开发者在各种场景中高效应用这一技术。

weixin_28630185的博客 352

黑马程序员 OC语言 - 4 OC特有语法

若排版有错误,请查看:OC语言 - 4 OC特有语法.pdf

泠风小和 518

Field-Oriented Control (FOC) 矢量控制 磁场定向控制

Field-Oriented Control (FOC) 磁场定向控制(FOC),也称为矢量控制,是一种用于控制永磁同步电动机(PMSM)和交流感应电动机(ACIM)的技术。 FOC在整个扭矩和速度范围内都具有良好的控制能力。 FOC的实现需要将定子电流从固定参考系转换为转子磁通参考系(也称为d-q参考系)。 速度控制和转矩控制是FOC最常用的控制模式。位置控制模式不太常见。大多数牵引应用使用转矩控制模式,在该模式下,电动机控制系统遵循参考转矩值。在速度控制模式下,电机控制器遵循参考速度值,并生成用于形成内

>>> 1万+

黑马程序员-OC语言核心语法(1)

1. 点语法:对象调用方法       上述完整方法为- (void)setAge:(int)age;   1> 如何判断set和get方法:         如果赋值,则是set方法。                  eg:stu.age = 10;         否则是get方法。                   eg :  int age =

wlwl363的专栏 430

STM32 HAL库下DHT22高精度温湿度采集与30秒定时实现

单总线传感器(如DHT22)是嵌入式环境监测系统的核心数据源,其通信依赖微秒级精确时序控制。在STM32平台中,需结合硬件定时器(如TIM2)构建稳定周期触发机制,并通过GPIO+精确延时(非HAL_Delay)完成协议解析。该方案突破整数读取局限,完整还原带一位小数的温度与湿度值,显著提升工业级数据精度。典型应用于物联网终端、智能农业节点及边缘侧环境监控系统,为MQTT/CoAP等协议上报提供结构化原始数据支撑。本实践基于STM32F103与HAL库,不依赖第三方驱动,具备强可移植性与工程鲁棒性。

weixin_42453228的博客 513

二阶高通滤波器硬件设计:5种RC到有源方案对比与选型

在传感器前端和音频信号调理中,二阶高通滤波器是抑制直流偏移与低频干扰的关键模块。其设计核心围绕截止频率、品质因数Q、增益与噪声四个指标展开,其中Q值决定滤波器在转折频率附近的响应形状,如Butterworth最大平坦响应需Q=0.707。从纯无源RC电路到引入运放的有源拓扑,演变逻辑在于解决负载效应、提供增益并借助反馈提升Q值。实际工程中,RC级联、VCVS(Sallen-Key)、状态变量及回转器模拟电感等方案各有适用场景:RC电路简单但Q值受限,Sallen-Key单运放即可实现高Q,状态变量适合Q值独

weixin_32770423的博客 99

【黑马程序员】————OC特有语法

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 一、点语法 点语法的本质还是方法调用 p.age = 10; // [p setAge:10]; int a = p.age; // [p age]; 二、成员变量的作用域 @public : 在任何地方都能直接访问对象的成员变量 @pri...

aa123321621的博客 208

IDEA集成selenium自动化测试(Java+Selenuim+testNG+Maven)

文章目录写在前面01 | 新建Maven项目02 | idea集成Selenium03 | 写在前面 因为软件测试的需求和博主比较经常使用Java,于是,想在Idea中集成selenuim,用Java编写测试代码,因此有了这篇文章来记录一下过程。 资源指路: java使用selenium实现模拟浏览器操作API大全 模拟登录 TestNG入门教程 感谢上面博客的大佬。 01 | 新建Maven项目 不使用骨架创建,直接点击左侧Maven,然后一路next即可。 02 | idea集成Sele

aLinxi的博客 8279

黑马程序员——02-OC初体验

一、OC简介 OC是Objective-C的简称,是根据C语言所衍生出来的语言,在C语言的基础上,增加了一层最小的面向对象语法,而且完全兼容C语言,可以在OC代码中混入C语言代码,甚至是C++代码。可以使用OC开发Mac OS X平台和iOS平台的应用程序。   二、OC语法 1、关键字 OC中基本上所有关键字都是以@开头,在此列举一些常用的关键字 示例: @interface、@i

yqlqt的专栏 462

《计算机网络》复试问答题总结

DNS 是一个联机分布式数据库系统,负责主机名和 IP 地址之间的转换,需要进行域名查询的机器主动发起域名解析请求,域名服务器则随时准备做出响应。域名服务器的数据库中存放着它所管辖范围的主机名和 IP 地址之间的映射表,域名服务器之间又可以相互联络和协作,以便分布在 Internet 各个域名服务器数据库中的域名都能被有效地搜索,从而实现主机名与 IP 地址的映射。为了提高解析效率,使用了域名缓存技术。在服务器、主机中设置一个专用的内存缓冲区。服务器用来存放近期解析过的域名及其对应的 IP 地址的映射。

weixin_45971154的博客 2029

在STM32F103RBT6微控制器上利用USB虚拟Com端口技术,高效实现ADC数据传输:详细操作步骤与示例代码解析

以上就是在STM32F103RBT6上使用USB虚拟Com端口实现ADC数据传输的全部内容。虽然过程中有很多步骤和细节需要注意,但只要按照步骤来,理解每一段代码的作用,就完全可以掌握这个过程。在实际应用中,我们可能需要根据实际需要修改一些代码,如调整ADC的参数,改变数据的处理方式等。但是,只要理解了这个过程,我们就可以很灵活地进行修改。希望这篇文章对你有所帮助。如果你有任何疑问,欢迎在评论区留言,我会尽我所能进行解答。

qq_38334677的博客 1168

黑马程序员学习笔记——OC之基本简介

简介: OC全称为Objective-C,是面向对象C的意思。是在C语言的基础上增加了一层面向对象的语法,而C语言是面向过程的。 其特点为: 1、 C语言的基础上增加了一层最小的面向对象的语法。C++的面向对象语法比JAVA多,JAVA的面向对象语法比OC多,OC只保留了面向对象语法的精华。 2、 完全兼容C语言。C、OC能混用。.c能编写C代码,.m能编写C、OC代码,.m能同时编写这三

yangying514的专栏 1206

YOLOv13改进策略【Head】| 引入RT-DETR中的RTDETRDecoder,替换检测头

本文记录的是基于RTDETRDecoder模块的YOLOv13目标检测改进方法研究。RT-DETR的模块通过,能为解码器提供高质量的初始,从而。相比v13原始的检测头,RT-DETR能,替换后能够更好的提高模型性能。

Limiiiing的博客 433

黑马程序员-IOS-OC基础-OC简介及基本语法

-------------------------------------- android培训、java培训、ios培训期待与您交流! ---------------------------------  OC简介:OC是Objective-C的简称,OC是在C语言的基础上,增加了一层最小的面向对象语法;完全兼容C语言;可以在OC代码中混入C语言代码,甚至C++代码;可以使用OC开

qq_25027273的专栏 467

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

黑马程序员——OC语言基础篇---核心语法

------Java培训、Android培训、iOS培训、.Net培训 期待与您交流! ------- 本篇主要通过一些小案例来讲述OC的一些核心语法,包括点语法、property、构造方法和分类等,本章内容的开发工具是Xcode,不再使用前面的终端来编译和运行程序了。 点语法 在学习其他语言的时候,经常可以见到 xxx.xxx,OC中也有类似的使用方法,被称作点语法,但其本质上却和其他语

liufeng124的专栏 970

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

黑马程序员——6、OC语言(基本语法)

yi

tan_qi的专栏 718

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

黑马程序员---OC基础---OC与C的差异

------- android培训、java培训、IOS培训期待与您交流! ---------- 1、源文件的对比 C语言中:我们能够遇到的文件后缀有: .c:C语言的源文件。 .o:C语言编译后的目标文件。 .out:可执行文件。 .h:头文件。 OC语言中:我们能遇到的文件后缀有:(常见的是.m和.h) .h:头文件。 .c:C语言的源文件。 .cpp/.cc:C++语

shmily3945的博客 986

黑马程序员6 oc核心语法

越来越喜欢oc这门语言,

kakamuz的专栏 647

黑马程序员——OC基础语法笔记和习题

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------1、Objective-C语言简介: C语言的基础上,增加了一层最小的面向对象语法 完全兼容C语言 可以在OC代码中混入C语言代码,甚至是C++代码 可以使用OC开发Mac OS X平台和iOS平台的应用程序2、OC语法 关键字 基本上所有关键字都是以@开头 下面列举一些常见的关键字,看一眼就行了

caizexu12345的博客 593

黑马程序员_iOS开发之OC基本语法

一、OC简介

LyWsLxYBoY的专栏 977

黑马程序员_OC初见识和语法基础

点击打开链接 点击打开链接 Java培训、Android培训、iOS培训、.Net培训、期待与您交流!">点击打开链接 点击打开链接 黑马程序员_OC初见识和语法基础 (一)OC概述 OC全称Objective-C,是一种面向对象的高级语言(而C语言是面向过程的,OC在C的基础上增加了一层面向对象的思想)。OC是苹果

黑马程序员_梁萧 979

黑马程序员——OC的初步认识,类和对象

—-Java培训、Android培训、iOS培训、.Net培训期待与您交流—- 一、oc简介 oc是在c语言的基础上,增加了面向对象的语法,开发的一种语法。 oc可以完全兼容c语言,可以在oc中混入c语言代码和一部分的c++代码 oc用途:用于Mac os x平台和ios平台的应用程序开发 文件后缀名c->.c oc->.m c++->.m 二、语法 1.关键字都是以

pangetzp_41904129的专栏 693

黑马程序员-oc中点语法的使用

------- android培训、java培训、期待与您交流! ---------- 在Java中,我们可以通过"对象名.成员变量名"来访问对象的公共成员变量,这个就称为"点语法"。比如: 1.在Student类的第2行定义了一个公共的成员变量age  public class Student {      public int age;  } 2.然后在第5行通过点

qq_22747589的专栏 402

黑马程序员_OC核心语法之分类

一、分类(category)

如果你错过了一天,那么你就真的错过了一天! 7029

黑马程序员——OC类的初始化与点语法

一、类的初始化方法每个类都有构造方法,这里的初始化方法就是和构造方法一个概念的. 下面来看一下如何自定义初始化方法: Person.h#import <Foundation/Foundation.h> @interface Person : NSObject{ NSString *_name; NSInteger _age; } //自定义初始化方法,必须以ini

c9527ios的博客 429

黑马程序员————OC基础学习重要小知识点总结

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 1、首先,什么是Objective-C?     Objective-C是一门基于C语言的面向对象语言,C语言的基础上,增加了一层最小的面向对象语法,完全兼容c语言,它在现代计算机的主要作用于Mac OS X作为桌面语言以及作用于iPhone OS(亦称:iOS)。它原是Ne

whymerain的专栏 873
上一篇: 黑马程序员——OC---OC特有语法01
下一篇: 黑马程序员——OC---内存管理
hityu
博客等级 码龄15年 1粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值