OC中协议, 类目, 时间, 延展, 属性
只有继承和协议需要引IMPORT "头文件";
必须接受marryprotocol协议, id<marryprotocol>基于类型的限定, 才能给实例变量赋值
@property (nonatomic, assign) id<marryprotocol> husband;
避免Optitonal没有实现的功能
if ([_husband respondsToSelector:@selector(driver)]) {
[_husband driver];
}
@required//必须实现的协议, 默认协议
- (void)seeGril;
@optional//可选实现协议
- (void)seeYou;
一个类可以遵守多个协议, 父类后面使用<>
定义类目 类目标 (类目名)
@interface NSString (sayHello)
延展
延展是一种特殊形式的类目
只是把类目的声明移到.m文件中
延展的作用主要就是管理"私有"方法
延展里面可以定义实例变量, 但是是私有的, 不能被子类继承
延展里面可以定义属性
获取当前时间, 但是打印的date是格林尼治时间
NSDate * date = [NSDate date];
用于日期对象NSdate和字符串的相互转换
NSDateFormatter * formattter = [[NSDateFormatter alloc] init];
hh是12时置, HH是24时值 a是上午 G是公元 E是周几
类目
类目(分类, category)只能给已知的类拓展方法, 不能添加实例变量
类目添加的方法会成为原始类的一部分, 级别相同, 会被子类继承
类目里不能定义实例变量
属性就是一对方法, 属性操作实例变量
[p setAge:24];//只要有setter,与下面的方法完全等价
p.name = @"张三";
p.sEx = @"男";
p.age = 24;
点在等号左边,是调用setter方法
点在等号右边,是调用getter方法
没有等号使用点,调用getter方法
果需要更改方法名用(setter = xxx:, getter = ooo);
readonly表示只读特新, 不可以对内容修改, 只有getter没有setter
默认的是生成readwrite,既有setter又有getter
相当于是创建了
- (void)setName:(NSString *)name;
- (NSString *)name;
@property (nonatomic, copy)NSString * sEx;
原子性特性 默认是atomic, 保证多线程情况下访问实例变量的安全性(实质上是在setter方法中增加了线程锁)
非原子性特性, nonatmiic(不保证多线程情况下数据安全)
setter语义特性,assgin, retain, copy
三个区别会导致生成的setter方法的内部实现不一样
assgin就是直接赋值, 而retain和copy会进行内存优化
第一原则:基本数据类型, 必须得用assgin
第二原则:所有的对象类型都可以用retain
第三原则:只接受<NSCoping>协议的对象才能写copy
第四原则:不写默认是assgin
OC中协议, 类目, 时间, 延展, 属性的更多相关文章
- Objective-C中的类目,延展,协议
Objective-C中的类目(Category),延展(Extension),协议(Protocol)这些名词看起来挺牛的,瞬间感觉OC好高大上.在其他OOP语言中就没见过这些名词,刚看到这三个名词 ...
- object-c中的类目,延展,协议
协议 协议只有方法的声明(类似于其他编程语言的接口) 协议相当于大家都所遵循的 关键字 @protocol 协议名 <所遵循的协议> 默认NSObject @end @pr ...
- Objective-C中的类目(Category),延展(Extension)
类目和延展的作用都是为了扩展一个类. Objective-C中的类目(Category) 一.类目的定义和作用 类目也叫分类,英文Category,在没有原类.m文件的基础上,给该类添加方法. 比如, ...
- iOS类目、延展和协议
类目:为已知的类增加新的方法:注意:类目里面只能写方法,不能写声明和属性,所以,类目不能作为接口来用 1.类目无法向已有类中添加实例变量.2.如果类目中的方法和已有类中的方法名称冲突时,类目中的方法优 ...
- Java生鲜电商平台-生鲜电商中商品类目、属性、品牌、单位架构设计与实战
Java生鲜电商平台-生鲜电商中商品类目.属性.品牌.单位架构设计与实战 说明:Java生鲜电商平台-生鲜电商中商品类目.属性.品牌.单位架构设计与实战经验分享 凡是涉及到购物,必然是建立在商品的基础 ...
- OC中的一个特性:延展
OC中的一个特性:延展其实说白了,延展就是弥补C语言中的前向申明,我们知道,在C语言中,如果你想调用一个函数的话,那么在此之前必须要声明一个这个函数,就是有前置性.OC中为了弥补C语言中的这个问题,就 ...
- OC中协议的概念以及用法
OC中协议的概念以及用法,协议也是OC中的一个重点,Foundation框架以及我们后面在写代码都会用到. OC中的协议就是相当于Java中的接口(抽象类),只不过OC中的名字更形象点,因为我们在学习 ...
- oc中的类学习笔记1
1.oc中的类和构造方法 NSAutoreleasePool * pool =[[NSAutoreleasePool alloc] init]; NSAutoreleasePool是一个类,alloc ...
- Java学习笔记十四:如何定义Java中的类以及使用对象的属性
如何定义Java中的类以及使用对象的属性 一:类的重要性: 所有Java程序都以类class为组织单元: 二:什么是类: 类是模子,确定对象将会拥有的特征(属性)和行为(方法): 三:类的组成: 属性 ...
随机推荐
- Spring+SpringMvc+Mybatis框架集成搭建教程四(项目部署及测试)
在IDEA中将项目部署到本地Tomcat下进行运行并验证整合结果 (1).点击如下图所示的下拉按钮,弹出Edit Configurations...后点击该项. (2).跳出如下界面后,点击红框内的& ...
- 低功耗蓝牙BLE之连接事件、连接参数和更新方法
转自:http://blog.csdn.net/zzfenglin/article/details/51304084 连接事件 在一个连接当中,主设备会在每个连接事件里向从设备发送数据包.一个连接事件 ...
- 用netbeans和xdebug调试php的配置
xdebug的chrome.firefox插件 chrome:Xdebug helper firefox:easy Xdebug ----------------------------------- ...
- Java中分割字符串
java.lang.String 的 split() 方法, JDK 1.4 or later public String[] split(String regex,int limit) 示例代码 p ...
- Jetty使用教程(四:21-22)—Jetty开发指南
二十一.嵌入式开发 21.1 Jetty嵌入式开发HelloWorld 本章节将提供一些教程,通过Jetty API快速开发嵌入式代码 21.1.1 下载Jetty的jar包 Jetty目前已经把所有 ...
- python多线程编程
Python多线程编程中常用方法: 1.join()方法:如果一个线程或者在函数执行的过程中调用另一个线程,并且希望待其完成操作后才能执行,那么在调用线程的时就可以使用被调线程的join方法join( ...
- Memcached vs Redis
Memcached和Redis哪一个能有更好的表现? Redis可以看作是Memcached的超集,这让Redis不仅仅可以用来当缓存,也可以作为实际的数据存储. 强大的数据结构以及操作命令. 默认持 ...
- phonegap之android原生日历调用
android日历调用首先第一步我们要添加权限 <uses-permission android:name="android.permission.READ_CALENDAR" ...
- 每日一问:面试结束时面试官问"你有什么问题需要问我呢",该如何回答?
面试结束时面试官问"你有什么问题需要问我呢",该如何回答?
- Undefined symbols for architecture x86_64: "_OBJC_CLASS_$_The49DayPersonalFullscreenGiftModel", referenced from: objc-class-ref in The49DayPersonalRoomGiftModel.o ld: symbol(s) not found for a
Undefined symbols for architecture x86_64: "_OBJC_CLASS_$_The49DayPersonalFullscreenGiftModel&q ...