首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Objective-C类目,延展,协议

Objective-C类目(Category),延展(Extension),协议(Protocol)这些名词看起来挺牛,瞬间感觉OC好高大上。...一.Objective-C类目(Category)         在Objective-C比其他OOP编程语言多了个类目,在OC除了用继承来扩充类功能函数外我们还可以用类目来实现。...二.Objective-C延展(Extension)         简单说匿名类目就是延展,在延展定义方法是类私有的方法只能在类内部调用,定义延展方式就是把类目中括号得名字省略掉,括号保留这就是延展...Memory[1683:303] PrivateFunction1 PS:我是在别的头文件定义延展,在.m中被实现 三、Objective协议Protocol     ​    ​    ​...,在这个类中有一个计算方法,需要对两个数计算,有一个参数是对象类型必须遵循协议CalculatorProtocol,主要代码如下: 1 2 3 4 5 6 7 //实现传入对象必须服从协议方法

99880
您找到你想要的搜索结果了吗?
是的
没有找到

Objective-C一些特殊数据类型

Objective-C,有一些我们之前并不熟悉但是经常见到数据类型,比如id、nil、Nil、SEL等等。在很多文章里,我们都见过这些数据类型介绍,但是都没有说太清楚。...这篇文章从最底层定义开始,介绍一下这些类型到底是怎么定义,这会帮助我们更加深入地了解Objective-C。...那么实际上,你使用GNU Objective-C运行时间库和NeXT Objective-C运行运行时间库(Mac OS X使用NeXT运行时间库)时,它们定义是不一样。...说白了SEL就是返回方法名。 IMP 从上面的头文件我们可以看到,IMP定义为 id (*IMP) (id, SEL, …)。...也就是说,Method(我们常说方法)表示一种类型,这种类型与selector和实现(implementation)相关。

62720

在Java为什么不同返回类型不算方法重载?

本文已收录《Java常见面试题》:https://gitee.com/mydb/interview 方法重载是指在同一个类,定义了多个同名方法,但每个方法参数类型或者是参数个数不同就是方法重载...从方法签名组成规则我们可以看出,方法返回类型不是方法签名组成部分,所以当同一个类中出现了多个方法名和参数相同,但返回类型不同方法时,JVM 就没办法通过方法签名来判断到底要调用哪个方法了,如下图所示...: 那为什么返回类型不能做为方法签名一部分呢?...总结 在同一个类定义了多个同名方法,但每个方法参数类型或者是参数个数不同就是方法重载。方法重载典型使用场景是 String valueOf 方法,它有 9 种实现。...方法返回类型不能作为方法重载依据,因为它不是方法签名组成部分。

3.3K10

Objective-C属性机制

Objective-C 2.0属性机制为我们提供了便捷获取和设置实例变量方式,也可以说属性为我们提供了一个默认设置器和访问器实现。...在学习OC属性之前我们先要知道为什么要为变量实现getter和setter方法,我们先来了解一下实例作用域。     实例变量作用域如下:         1.... 在实现文件我们用@synthesize来实现,用@synthesize来修饰相应变量就起到类getter 和 setter 方法实现作用。...,适合基本数据类型     ​    ​    ​copy(拷贝):把原来对象拷贝过来,计数器会加一,比如原来对象地址为0x01 ,拷贝过来对象地址为0x02;     ​    ​    ​retain...nonatomic: 线程不安全;   我们可以简写属性,直接在接口文件吧{}省略掉,直接用@property来定义方法,省去实现文件@synthesize, 访问属性时用_propertyName

1.3K70

Objective-C集合类

下面详细介绍Objective-C集合类以及每个集合类用法,学过其他面向对象编程语言小伙伴们看到OC集合类会有种莫名亲切感,理解起来问题不大,可以类比Java集合类去学习...在Objective-C集合类主要包括不可变数组--NSArray,  可变数组--NSMutableArray,   不可变字典--NSDictionary,    可变字典--NSMutableDictionary...一、数组         1.不可变数组  NSArray             数组是有序对象集合,用来存储对象有序列表,在OC数组必须存是对象,不能是基本数据类型,若想存入基本数据类型...以数组形式返回:-(NSArray *) allObjects;     ​    ​    ​    ​    ​    ​随进获取集合元素:-(id) anyObject;     ​    ​    ​    ​...    ​    ​前面不止一次提到在OC集合类是不能放基本数据类型,那么我们如何把基本数据类型封装成对象呢?

1.1K70

Objective-C内存管理

OC中使用引用计数和垃圾回收来管理内存,在OC为每个对象分配一个引用计数器,当对象刚刚被创建时其初始值为1,当有某段代码需要访问一个对象是时,会将该对象引用计数器加1(通过retain来实现);当访问一个对象结束时...,会将该对象引用计数器减1(通过release来实现);当计数器为0时,该对象占用内存空间会被收回。...等方法,需要在XCode中进行设置,设置如下: 把Objective-C Automatic Reference Counting 改为NO,即可。     ​    ​...(3).在可变数组移除一个str,观察retainCount变化     ​    ​    ​(4)我们为什么要用可变字符串呢?稍后会提到为什么。...FomatRetainCount = 3 2014-08-03 20:18:37.240 Memory[2499:303] 传入变量RetainCount = 3     ​Objective-C

77290

Objective-Cruntime机制应用

Objective-Cruntime机制应用 一、初识runtime         Objective-C是一种动态语言,所谓动态语言,是在程序执行时动态的确定变量类型,执行变量类型对应方法...,首先,在头文件没有提供任何方法接口,我们没有办法使用点语法做任何操作,privateOne和PrivateTow两个变量虽然声明在了头文件,却是私有类型,通过指针方式我们虽然可以看到他们,却不能做任何读取修改操作...,这里将返回一个Ivar类型指针     //class_copyIvarList方法可以捕获到类所有变量,将变量数量存在一个unsigned int指针     Ivar * mem = class_copyIvarList...,你或许会遇到一个问题,ARC下,编译器不允许你将int类型值赋值给id,在buildset中将Objective-C Automatic Reference Counting修改为No即可。...六、动态为类添加方法         这个runtime机制最强大部分要到了,试想,如果我们可以动态向类添加方法,那将是一件多么令人激动事情,注意,这里是动态添加,和类别的最大不同在于这种方式是运行时才决定是否添加方法

39350

Objective-CNSArray类解读

Objective-CNSArray类解读     NSArray数组类是Objective-C语言中常用也是重要一个类,除了开发中常用到一些基础功能,NSArray及其相关类还封装了许多更加强大功能...:(NSUInteger)index; //初始化方法 - (instancetype)init; //通过C语言风格数组创建NSArray对象 需要注意,C数组需要为Objective对象,cnt...; //像数组追加一个元素 这个方法会返回一个新数组 - (NSArray *)arrayByAddingObject:(ObjectType)anObject; //像数组追加一组元素...; //返回一个字符串,将数组元素以separator为分隔符进行组合 /* NSArray * array = @[@1,@2,@3,@4]; 将打印1,2,3,4 NSString * res...C数组 objects参数需要为分配好空间C指针 - (void)getObjects:(ObjectType __unsafe_unretained [])objects range:(NSRange

1.2K20

Objective-C继承和多态

Objective-Csuper是指向直接父类指针,而self是指向本身指针,self就相当于javathis指针。...在Objectiv-C几乎所有的类都是继承自NSObject类,NSObject类存在大量功能强大方法。下面对NSObject类各种方法进行试验和介绍:         1....= str1"); }     ​    ​Objective-C继承         继承是is-a关系,比如猫咪是一个动物,那么动物是父类,而猫咪是动物子类。...2014-07-30 08:38:12.958 HelloOC[483:303] 我是富二代BILL`s son,我超喜欢飙车 ​Objective-C多态     ​    ​多态简单说就是对于不同对象响应同一个方法时做出不同反应...在 OC动态类型id是实现多态一种方式,id是一个独特数据类型,可以转换为任何数据类型,上面的富人和富二代可以这样定义 1 2 3 4 5 6 7 8 9 10 id richer = nil;

1.2K80

Objective-CBlock(闭包)

学习OCblock之前也小担心一下,Block在OC属于高级部分,心里有又有个疑问:学起来难不难?...有返回 1 int (^sumBlock) (int, int);             无返回  1 void (^myBlock)(int, int);  2.给block块赋值            ...如果要想block和不可变局部变量绑定的话,我们要加上_block         还是引用上面博客一段话来做一下总结吧: 对值类型修改,如果block初始化后,无法同步到block内部...对于引用类型修改,如果block初始化后,修改指针指向,即指向另外一块内存,这样也是无法同步到block内部 对于引用类型修改,如果block初始化后,对指针指向内存进行修改,...对于成员变量修改都是通过对象self指针引用来实现。 block内部对于成员变量访问也是通过block结构体对象成员self 指针引用来实现

1.4K90

Objective-C单例模式

​    ​单例模式算是设计模式中比较简单一种吧,设计模式不是只针对某种编程语言,在C++, Java, PHP等其他OOP语言也有设计模式,笔者初接触设计模式是通过《漫谈设计模式》了解。...首先得了解什么是单例模式,用大白话说,单例模式就是在程序这个类只对应着一个实例,这就是单例模式,单例模式一般用全局静态对象来实现。...下面我们会建立一个生成单例类SingletonClass,在实现文件定义各种方法来实现我们单例模式。     ​    ​...1.单例模式一般用全局静态对象来实现,所以我们在SingletonClass.m定义一个静态全局变量是少不了 1 2 //定义静态全局变量 static SingletonClass *single...= nil;     ​    ​2.上面的静态变量是定义在实现文件所以是私有的,要想获取该类实例得有个getInstance方法来获取实例,在给静态变量分配内存空间之前首先要判断是否已经分配过啦

1.8K70

Objective-C委托(代理)模式

还是那句话,第一次接触代理模式是在Java接触,在Java实现代理模式和接口是少不了。当时学习Spring时候用到了接口回调,其实就是实现委托代理模式。...简单说代理就是把相应功能交给实现接口相应来解决。在OC没有接口该如何实现代理呢?...前面的博客笔者说提了一句,在OC协议和Java接口极为相似,都是只声明方法而不去实现,方法实现在OC交个遵循协议类,而在Java中方法实现交给实现接口类。...1.在Java写代理的话,我会先写房屋中介接口,所以在OC我们首先也要先声明房屋中介协议,Protocol方法是每个房屋中介必须有的方法,所以在Java中会抽象成接口,而在OC我们会把他声明为协议...,委托给代理公司 -(void) rentHouse;   //包租婆收租啦 -(void) receiveMoney; @end     实现代码: 在实现代码包租公会把房子通过协议saleHouse

1.2K90

Objective-CBlock回调模式

在Component我们只给出代码块声明,不进行实现,然后在Controller中进行实现,在Component中进行调用,也就是说由组件提供代码块形式和代码块参数,在Controller给出业务逻辑...15 16 17 18 19 20 //  ComponentBlock.h //  Memory //  Created by ludashi on 14-8-19. //  Copyright (c)...All rights reserved. //   #import //定义Block块类型变量 typedef void (^BlockType)...(NSString *parameter); @interface ComponentBlock : NSObject   //声明Block类型变量 @property (nonatomic, strong...,为了实现组件封装,我们用延展来隐藏我们组件要用到方法,在延展声明了我们要使用组件,然后再实现部分进行组件初始化和编写组件要调用代码块,代码块参数由组件提供,而控制器只提供业务逻辑控制

1.7K50

iOSTableView不同类型

TableView是iOS开发中经常用到View,针对不同显示需求,我们需要不同Cell来进行显示,比较复杂显示我们一般会自定义Cell样式,但是简单显示就可以靠iOS本身支持列表类型了。...iOS目前支持四列表类型,分别是: UITableViewCellStyleDefault:默认类型,可以显示图片和文本 UITableViewCellStyleSubtitle:可以显示图片、文本和子文本...UITableViewCellStyleValue1:可以显示图片、文本和子文本 UITableViewCellStyleValue2:可以显示文本和子文本 其显示样式也各不相同,按顺序如下所示:...tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *cell; // 共四种类型...switch (indexPath.row) { case 0:// UITableViewCellStyleDefault:默认类型,支持显示图片和文本

1.1K20
领券