OC Categroy类别】的更多相关文章

Categroy类别,又称为扩展类,在类的原基础上扩展方法,且不可添加变量,如果扩展的方法与原始类中的方法相同,则会隐藏原始方法,且不可在扩展方法中通过super调用原始方法,这里与继承不同. 定义: 下面演示在人的基础扩展为学生 定义类 Person.h #import <Foundation/Foundation.h> @interface Person : NSObject @property(retain) NSString *name; @property(nonatomic,ass…
一.分类: 1.适用范围      当你已经封装好了一个类(也可能是系统类.第三方库),不想在改动这个类了,可是随着程序功能的增加需要在类中增加一个方法,这时我们不必修改主类,只需要给你原来的类增加一个分类.      将一个大型的类拆分成不同的分类,在不同分类中实现类别声明的方法,这样可以将一个类的实现写到多个.m文件中,方便管理和协同开发.      分类中的方法可以只声明,不实现,所以在协议不支持可选方法的时候(协议现在已经支持可选方法),通常把分类作为非正式协议使用. 2.语法格式  …
一.类别(category) 类别(category)——通过使用类别,我们可以动态地为现有的类添加新方法,而且可以将类定义模块化地分不到多个相关文件中.通常只在类别中定义方法.(类别,接口部分的定义,通常该文件命名为已有"类+类别名.h") 我们知道,如果一个函数在.h文件中无声明而在.m文件中定义它的实现,那么该方法就是私有方法,只能在本类的文件中使用.  若我们在类别的接口部分声明这个方法,那么我们就可以实现对该私有方法的访问. 二.扩展(extension) 扩展(extens…
类别(category)--通过使用类别,我们能够动态地为现有的类加入新方法.并且能够将类定义模块化地分不到多个相关文件里.通常仅仅在类别中定义方法. 类别,接口部分的定义,通常该文件命名为已有"类+类别名.h" @interface 已有类 (类别名) //.......方法实现 @end 比如.考虑为NSNumber添加一个类别,则接口部分代码例如以下 #import <Foundation/Foundation.h> @interface NSNumber (code…
Categroy类别,又称为扩展类,在类的原基础上扩展方法,且不可添加变量,如果扩展的方法与原始类中的方法相同,则会隐藏原始方法,且不可在扩展方法中通过super调用原始方法,这里与继承不同. 定义: 下面演示在人的基础扩展为学生 定义类 Person.h #import <Foundation/Foundation.h> @interface Person : NSObject @property(retain)  NSString *name; @property(nonatomic,as…
问题: OC中类别(Category)是什么?Category类别是Objective-C语言中提供的一个灵活的类扩展机制.类别用于在不获悉.不改变原来代码的情况下往一个已经存在的类中添加新的方法,只需要知道这个类的公开接口,而不需要知道类的源代码.类别只能为已存在的类添加新的功能扩展方法,而不能添加新的属性.类别扩展的新方法有更高的优先级,会覆盖同名的原类的已有方法. 问题: Category类别与其他特性的比较?与继承Inheritance的比较:1.子类继承是进行类扩展的另一种常用方法,当…
多态是函数调用的动态绑定技术: c++动态绑定依赖于this指针与虚函数表. 虚函数表的排序规则: 1)虚函数按照其声明顺序放于表中. 2)父类的虚函数在子类的虚函数前面. 3)如果子类重写了父类的虚函数,覆盖的函数被放到了虚表中原来父类虚函数的位置. 4)子类虚函数中使用父类同名函数: class B{ public: virtual void f() { cout << "B::f()" << endl;}};class B1 : public B{ pub…
最近项目用到了蓝牙连接,搜索设备的内容,其中需要搜索过程中出现波纹的动画效果,在这里将项目中OC语言编写的这种动画效果,转换成Swift编写,下面简单介绍说明一下代码. 这里用到了两种方法实现波纹效果,一种是波纹持续显示,一种是点击以后出现一次波纹的效果 首先是第一种,持续显示波纹 这个内容是重写绘图方法,override func drawRect(rect: CGRect){ } 首先需要设置显示波纹的数量,然后运用for循环进行创建,动画效果,并且添加到layer上 let pulsing…
要学习Swift这门语言,就必须先了解Swift的关键字及对应的解释.这里就列一下在Swift中常用到的关键字. 关键字是类似于标识符的保留字符序列,除非用重音符号(`)将其括起来,否则不能用作标识符.关键字是对编译器具有特殊意义的预定义保留标识符.常见的关键字有以下4种. 与声明有关的关键字:class.deinit.enum.extension.func.import.init.let.protocol.static.struct.subscript.typealias和var. 与语句有关…
8. Dataset (DataFrame) 的基础操作 8.1. 有类型操作 8.2. 无类型转换 8.5. Column 对象 9. 缺失值处理 10. 聚合 11. 连接 8. Dataset (DataFrame) 的基础操作 导读 这一章节主要目的是介绍 Dataset 的基础操作, 当然, DataFrame 就是 Dataset, 所以这些操作大部分也适用于 DataFrame 有类型的转换操作 无类型的转换操作 基础 Action 空值如何处理 统计操作 8.1. 有类型操作 分…
OC 类别与扩展(匿名类别) 类别(Categroy): 又称为扩展类,在类的原基础上扩展方法,且不可添加变量,如果扩展的方法与原始类中的方法相同,则会隐藏原始方法,且不可在扩展方法中通过super调用原始方法,这里与继承不同. 类别文件名 = 原类名 + 类别名 类别的格式: @interface 原类名 (类别名) 在类别中添加 @property 只做了set/get的声明,没有实现,更不会生成成员变量. 类别的作用: ①为现有的类添加新方法: ②将类的实现分散到多个不同文件或多个不同框架…
1.继承:    父类和子类的关系.    1.1 生活中的继承        父类           子类           父类              子类                  对象        人                男人          男人               老男人             xiDaDa        外星人        变形精钢  变形精钢       汽车人             大黄蜂.擎天柱          生…
继承.多态.类别 学习目标 1.继承的含义 2.父类子类的别称 3.字段和消息的继承 4.重写和重写消息的调用 5.多态 6.类别(Category) ============================================= 1.需要理解的知识 面向对象的三个基本特征:   1.封装 2.继承 3.多态 1.继承(单继承):    父类(超类)和子类的关系. 继承的两个类,存在父子关系. OC支持单继承,不支持多继承. 1.1 生活中的继承 人(父类) --  男人/女人(子类…
1.我么在调用NSLog()方法打印一个对象时,实际上是调用了该对象的description方法,这个description方法就和Java中的toString()方法一样.所以,下面两行代码其实是一样的 NSLog(@"%@", p) ; NSLog(@"%@", [p description]) ; description方法是NSObject类的一个实例方法,所有的OC都是NSObject类的子类,因此,所有的类都有description方法.descript…
类别(category)--通过使用类别,我们可以动态地为现有的类添加新方法,而且可以将类定义模块化地分不到多个相关文件中.通常只在类别中定义方法. 类别,接口部分的定义,通常该文件命名为已有"类+类别名.h" @interface 已有类 (类别名) //.......方法实现 @end #import #import "Buy.h" @interface Person : NSObject <<span style="color: rgb(…
OC分类(类目/类别) 和 类扩展 - 全解析   具体见: oschina -> MyDemo -> 011.FoundationLog-OC分类剖析 http://blog.csdn.net/u013378438/article/details/44491703     关于OC分类,非常重要的知识点:   >>分类能够对实例方法,类方法进行扩展,但不能够添加类的属性及实例变量. >>分类能够像类本身一样,调用self来访问类的方法,属性. 但对于通过新建.h与.m…
首先我们来看一下场景,如果我们现在想对一个类进行功能的扩充,我们该怎么做? 对于面向对象编程的话,首先会想到继承,但是继承有两个问题: 第一个问题:继承的前提是这个类可以被继承,因为在Java中有些类是不允许继承的,定义成final类,同样的OC中也是有不可以继承的类 第二个问题:这个类可以被继承,但是继承我们知道是侵入性的,就是我可能只是想实现一个功能,但是继承之后,子类就会把父类的所有功能(属性和方法)都继承了,这个代价太大了.没必要 所以对于Java中,我们可以使用聚合的方式去实现, 而对…
1.SEL SEL是selector的缩写,selector在OC中作用是定义一个方法变量,通过该方法变量来调用方法.我们在后面的UI中会经常用selector来调用事件方法.下面我将举两个例子来说明SEL的使用. 直接通过方法名来调用,我们先新建一个Student类,并在其中定义一个名叫Test的对象方法.并定义一个输出语句: -(void)test { NSLog(@"这是SEL的测试方法"); } 我们在Main方法中通过SEL调用就会输出以上结果,如下: SEL s = @se…
类别,有些程序员又称之为分类. 类别是一种为现有的类添加新方法的方式,尤其是为系统的做扩展的时候,不用继承系统类,可以直接为类添加新的方法.也可以覆盖系统类的方法. 如: @interface NSObject (MyCategory) - (void)myMethod; @end 这样我们就给NSObject 添加了一个方法 myMethod(). 注意,一般情况下,我们只用分类为现有类添加方法,而很少为现有类添加属性. 假设我们有一个Person 类 person.h @interface…
Category(分类): 当我们在开发过程中要给类添加新的方法时,一般不要去动原类. 再不改动原类的限制下,怎么拓展类的方法?以往我们的做法是新建子类使其继承该类,然后通过子类拓展类的行为. OC提供了一种全新的方法:Category(分类).在不改动原类的基础上动态的拓展类的行为. 假如我们要动态拓展Student类,则应该建一个分类(Category),注意:文件命名要有规范,Student+StuOthers.h 格式:只要在被扩展的类名(原类)后加(),在括号里写分类名(拓展类名):…
类别就是向类加入一些实用的功能或者方法 利于开发 类能够是系统类.能够是自己定义类 类别跟子类是不一样的.类别仅仅能加入一些方法 属性变量什么的不能够加入 不创建新类,就可以对已有类进行扩展 做项目的时候 跟其它程序猿会更好的合作 新建类别的图放在最后面 我们为系统类NSArray加入一个打印方法 使得能输出中文 界面例如以下 然后再NSArray+MyNSLog.h中声明一个函数 #import <Foundation/Foundation.h> @interface NSArray (My…
     在编写面向对象的程序时,常常要为现有的类加入一些新的行为,通常採用创建子类的方法. 只是有时候子类不方便.比方,想为NSString类加入一个新的行为,可是NSString实际上仅仅是一个类簇的表面形式,因而为这种类创建子类会很困难. 利用Objective-C的动态执行时机制,能够使用类别(category)来为现有的类加入新方法. 1.创建类别 通常类别代码放在独立的文件里,以"类名称+类别名称"的风格命名. 1.1開始创建 打开项目,在导航栏中选择你想让文件出现的群组.…
关于面向对象 看起来简单,好好体会其实有点深奥,初学的时候更感觉抽象,可能由于开发经验不足的关系吧,很难体会到面向对象的精髓. 放轻松,我们来用最直白得方式来探讨一下面向对象. 首先,编程是为了用计算机解决现实生活中的问题,或者模拟各种游戏情景提供娱乐. 面向过程编程是一种思维——知道做一件事的具体步骤,按流程一步一步的执行,致力于问题解决的具体实现步骤. 而我们今天要提起的面向对象也是一种思维方式——是一种模拟人类行为,思考的方式寻求最直接的途径解决问题. 为了说明这一点呢,我们一起来看看我们…
OC KVC KVC 全称 key valued coding 键值编码 在说KVC之前应该简单的了解一下反射机制 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法. 对于任意一个对象,都能够调用它的任意一个方法和属性. JAVA,C#都有这个机制. ObjC也有,所以你根部不必进行任何操作就可以进行属性的动态读写,那就是KVC. KVC的操作方法由NSKeyValueCoding提供,而他是NSObject的类别,也就是说ObjC中几乎所有的对象都支持KVC操作. 常用…
OC 问题汇总: 1. 你如何理解 iOS 内存管理   1. new alloc copy retain这些对象我们都要主动的release或者 autorelease   2. 如果是类方法创建的对象,那么系统自动释放池自动在适当的 时候会帮我们 release   3. ARC xcode 自动会帮我们人工智能的添加 release autorelease 操 作 2. C语言里的数组与OC数组的区别 OC 数组是一个对象,有大量的方法,c 没有都需要自己写 C 数组删除是需要后面往前移动…
开小差:最近发现自己有一个经验主义的毛病,不太容易接受新的知识,这对从事技术研发的人来说不太合理,需要改之. 正文:通过读写大量代码我有自己的一套编程思路和习惯,自认为自己的编码习惯还是不错的,代码结构也算清晰,因为我一直以来都是代码看的多写的多,但是总结的比较少,知识经常不成体系.以后多花点时间把自己的经验和学习知识加以总结一下吧,这样有利于去指导新人,也更有利于加深自己的知识认知.今天就从代码规范入手总结一下iOS开发中好的编码规范吧.我们在开发中看别人的代码的时候经常会去抱怨至少内心里骂娘…
1.项目经验 2.基础问题 3.指南认识 4.解决思路 ios开发三大块: 1.Oc基础 2.CocoaTouch框架 3.Xcode使用 -------------------- CocoaTouch Media Core Services Core OS -------------------- System Framework OC的类声明,定义域 OC关键字定义为  @class O-C特有的语句for(..in ..)迭代循环,其他的条件和循环语句和c一样 OC对面向对象的概述 (1)…
objective-c中的Categary(类别)使用相当广泛,其内涵类似于javascript中的prototype,可以扩展某一个类的方法. 下面给出一个基本的例子,参考oc程序设计一书: 实现一个categary #import <Foundation/Foundation.h> @interface NSString(Util) //在NSString的基础上实现Util类别 -(BOOL)isUrl; @end #import "NSString+Util.h"…
.OC中的私有变量 在类的实现即.m @implementation中也可以声明成员变量,但是因为在其他文件中通常都只 是包含头文件而不会包含实现文件,所以在.m文件中声明的成员变量是@private的.在.m中定义 的成员变量不能和它的头文件.h中的成员变量同名,在这期间使用@public等关键字也是徒劳的. 能够使用 父类的@public 类型的变量.@protect类型的变量 @private 类型的变量可以看到,但是不能使用 OC中私有方法实现有两种方式: 1)方法在.m中实现,不在.h…
id数据类型 1.通用的指针类型 2.没有*号 3.使用id类型时,不能给对象的属性或成员变量进行赋值 4.可以对其发送任何(存在的)消息   import与@class的区别 1.import会包含这个类的所有信息,包括实体变量和方法,而@class只是告诉编译器,其后面声明的名称是类的名称 2.如果类之间有循环依赖关系使用#import来相互包含,那么就会出现编译错误. 3.如果使用@class在两个类的头文件中相互声明,则不会有编译错误出现. 4.@class是放在interface中的…