Category

iOS categoryde用法以及extension的区别

不问归期 提交于 2020-02-28 20:01:48
OS中category即:类别 ;extension 为扩张 一.category 类别是一种为现有的类添加新方法的方式。 利用Objective-C的动态运行时分配机制,Category提供了一种比继承(inheritance)更为简洁的方法来对class进行扩展,无需创建对象类的子类就能为现有的类添加新方法,可以为任何已经存在的class添加方法,包括那些没有源代码的类(如某些框架类)。 1.类别的局限:(1)无法向类别中添加新的实例变量,类别没有位置容纳实例变量。如果一定要添加实例变量,可以采用runtime 库objc_setAssociatedObject / objc_getAssociatedObject 函数来解决。objc_setAssociatedObject 就是将一个对象跟另一个对象进行关联,并用一个key来标示,objc_getAssociatedObject 就是用这个key来拿到与receiver相关联的一个对象。 注意:必须使用@dynamic来让编译器知道我们自己实现setter/getter方法(如果对于@dynamic有疑问,请参见:http://stackoverflow.com/questions/1160498/synthesize-vs-dynamic-what-are-the-differences) 不能使用@synthesize

iOS开发技巧(系列十八:扩展UIColor,支持十六进制颜色设置)

僤鯓⒐⒋嵵緔 提交于 2020-02-28 13:54:33
新建一个Category,命名为UIColor+Hex,表示UIColor支持十六进制Hex颜色设置。 UIColor+Hex.h文件, #import <UIKit/UIKit.h> #define RGBA_COLOR(R, G, B, A) [UIColor colorWithRed:((R) / 255.0f) green:((G) / 255.0f) blue:((B) / 255.0f) alpha:A] #define RGB_COLOR(R, G, B) [UIColor colorWithRed:((R) / 255.0f) green:((G) / 255.0f) blue:((B) / 255.0f) alpha:1.0f] @interface UIColor (Hex) + (UIColor *)colorWithHexString:(NSString *)color; //从十六进制字符串获取颜色, //color:支持@“#123456”、 @“0X123456”、 @“123456”三种格式 + (UIColor *)colorWithHexString:(NSString *)color alpha:(CGFloat)alpha; @end 上面的代码在开头是两个宏定义,就是对[UIColor colorWithRed:green:blue

oc NSDate、类的扩展 、代理(家庭-保姆)

自作多情 提交于 2019-12-04 16:48:48
⼀、 NSDate 1、⺴络请求中的时间戳 计算当前时间距离 1970年1⽉1⽇ 的 秒 数 2、关于时区 24 个时区 北京 东八区 NSDate 输出的永远是 0 时区的时间 英国 格林尼治时间 GMT Greenwich Mean Time 3、NSDate使用 // 创建日期:表示当前的时间 NSDate * nowDate = [ NSDate date ]; // 创建日期:以当前时间为参考点,创建表示昨天这个时间的日期对象 double oneDay = 24 * 3600 ; NSDate * yesterday = [ NSDate dateWithTimeIntervalSinceNow :-oneDay]; NSDate * since2001 = [ NSDate dateWithTimeIntervalSinceReferenceDate : 0 ]; NSDate * since1970 = [ NSDate dateWithTimeIntervalSince1970 : 0 ]; NSDate * sinceAnyDay = [ NSDate dateWithTimeInterval :oneDay sinceDate :since2001]; // NSTimeInterval 是 double 类型 NSTimeInterval interval

Android零基础入门第79节:Intent 属性详解(上)

跟風遠走 提交于 2019-11-28 12:05:03
Android应用将会根据Intent来启动指定组件,至于到底启动哪个组件,则取决于Intent的各属性。本期将详细介绍Intent的各属性值,以及 Android如何根据不同属性值来启动相应的组件。 Intent 对象大致包含 Component、Action、Category、Data、Type、Extra 和 Flag 这 7 种属性,其中Component用于明确指定需要启动的目标组件,而Extra则用于携带需要交换的数据。 一、Component属性 Intent 的 Component 属性需要接受一个 ComponentName 对象,ComponentName 对象包含如下几个构造器。 ComponentName(String pkg, String cls):创建pkg所在包下的cls类所对应的组件。 ComponentName(Context pkg, String cls):创建pkg所对应的包下的cls类所对应的组件。 ComponentName(Context pkg, Class<?> cls):创建 pkg 所对应的包下的 cls 类所对应的组件。 上面几个构造器的本质是相同的,这说明创建一个ComponentName需要指定包名和类名。这样就可以唯一地确定一个组件类,这样应用程序即可根据给定的组件类去启动特定的组件。 除此之外

Activity Intent详解

时间秒杀一切 提交于 2019-11-27 07:44:47
1、Intent简介 Intent代表了Android应用的启动“意图”,Android应用将会根据Intent来启动指定组件,至于到底启动哪个组件,则取决于Intent的各个属性。下面就来介绍一下Intent的各种发展,以及Android如何根据不同属性来启动相应的组件。Intent是由Component、Action、Data、Category、Extra及Flag六部分组成的,接下来将分别对其进行详细介绍。 (1) Component name 组件名称实际上就是一个ComponentName对象,用于标识唯一的应用程序组件,即指明了期望的Intent组件,这种对象的名称是由目标组件的类名与目标组件的包名组合而成的。 需要注意的是Component name是一个 可选项 ,如果被设置,那么Intent对象就 显式 指定了要转向的组件,如果没有被设置,则Intent对象需要根据其他信息进行筛选查找。 组件名称通过 setComponent() , setClass() , setClassName() 设置,通过 getComponent() 获取。 intent.setClassName("com.example.testb", "com.example.testb.MainActivity"); ComponentName com=new ComponentName(