只有继承和协议需要引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中协议, 类目, 时间, 延展, 属性的更多相关文章

  1. Objective-C中的类目,延展,协议

    Objective-C中的类目(Category),延展(Extension),协议(Protocol)这些名词看起来挺牛的,瞬间感觉OC好高大上.在其他OOP语言中就没见过这些名词,刚看到这三个名词 ...

  2. object-c中的类目,延展,协议

    协议 协议只有方法的声明(类似于其他编程语言的接口)   协议相当于大家都所遵循的 关键字 @protocol 协议名 <所遵循的协议> 默认NSObject   @end     @pr ...

  3. Objective-C中的类目(Category),延展(Extension)

    类目和延展的作用都是为了扩展一个类. Objective-C中的类目(Category) 一.类目的定义和作用 类目也叫分类,英文Category,在没有原类.m文件的基础上,给该类添加方法. 比如, ...

  4. iOS类目、延展和协议

    类目:为已知的类增加新的方法:注意:类目里面只能写方法,不能写声明和属性,所以,类目不能作为接口来用 1.类目无法向已有类中添加实例变量.2.如果类目中的方法和已有类中的方法名称冲突时,类目中的方法优 ...

  5. Java生鲜电商平台-生鲜电商中商品类目、属性、品牌、单位架构设计与实战

    Java生鲜电商平台-生鲜电商中商品类目.属性.品牌.单位架构设计与实战 说明:Java生鲜电商平台-生鲜电商中商品类目.属性.品牌.单位架构设计与实战经验分享 凡是涉及到购物,必然是建立在商品的基础 ...

  6. OC中的一个特性:延展

    OC中的一个特性:延展其实说白了,延展就是弥补C语言中的前向申明,我们知道,在C语言中,如果你想调用一个函数的话,那么在此之前必须要声明一个这个函数,就是有前置性.OC中为了弥补C语言中的这个问题,就 ...

  7. OC中协议的概念以及用法

    OC中协议的概念以及用法,协议也是OC中的一个重点,Foundation框架以及我们后面在写代码都会用到. OC中的协议就是相当于Java中的接口(抽象类),只不过OC中的名字更形象点,因为我们在学习 ...

  8. oc中的类学习笔记1

    1.oc中的类和构造方法 NSAutoreleasePool * pool =[[NSAutoreleasePool alloc] init]; NSAutoreleasePool是一个类,alloc ...

  9. Java学习笔记十四:如何定义Java中的类以及使用对象的属性

    如何定义Java中的类以及使用对象的属性 一:类的重要性: 所有Java程序都以类class为组织单元: 二:什么是类: 类是模子,确定对象将会拥有的特征(属性)和行为(方法): 三:类的组成: 属性 ...

随机推荐

  1. Emmet,让你爱上敲代码

    原文链接:http://m.blog.csdn.net/article/details?id=53484535 不错 —— 由 都不要欺负我 分享 Emmet 是一个可用在许多流行文本编辑器上的极大简 ...

  2. 异或之(bzoj 3689)

    Description 给定n个非负整数A[1], A[2], --, A[n].对于每对(i, j)满足1 <= i < j <= n,得到一个新的数A[i] xor A[j],这 ...

  3. (转)ShardedJedisPool的使用

    package com.test; import java.util.ArrayList; import java.util.List; import redis.clients.jedis.Jedi ...

  4. mysql explain用法

    explain显示了mysql如何使用索引来处理select语句以及连接表.可以帮助选择更好的索引和写出更优化的查询语句. 使用方法,在select语句前加上explain就可以了,如: explai ...

  5. 百度地图-省市县联动加载地图 分类: Demo JavaScript 2015-04-26 13:08 530人阅读 评论(0) 收藏

    在平常项目中,我们会遇到这样的业务场景: 客户希望把自己的门店绘制在百度地图上,通过省.市.区的选择,然后加载不同区域下的店铺位置. 先看看效果图吧: 实现思路: 第一步:整理行政区域表: 要实现通过 ...

  6. MYSQL trigger 个人记录

    同学要写个trigger,稍微帮他研究了下 以下主要是个人猜想理解的 主要讲update 我们在创建trigger时,数据库会对创建了trigger的表进行事件监听. 当表中的一条记录发生update ...

  7. [R语言]R语言使用多线程对数据库进行大批量访问时出现无法连接问题

    问题描述: 在R中使用多线程对数据库进行写入,在服务器端运行脚本(linux环境),总是在第6-7万个任务线程时,出现无法连接到数据库的问题.任务中断,错误信息为task 6xxxx failed,C ...

  8. Compass的误解与新发现

    最后个人感觉 Compass是 css世界的.NET 很久以前看到 Compass 误以为是css编译器,因为总是在看到如何安装Scss的文章里面看到的 知道最近不小心进入 Compass官网溜达,才 ...

  9. 普通用户ssh无密码登录设置

    这段时间在做Hadoop的环境配置,用root用户只需要按照一定的步骤进行操作就可以直接实现无密码登录,但如果使用新建用户,怎么尝试都不行. 本帖大部分都是其他人帖子的内容.如果按照下面的步骤还是不能 ...

  10. java 写一个"HelloJavaWorld你好世界"输出到操作系统文件Hello.txt文件中

    package com.beiwo.homework; import java.io.File; import java.io.FileOutputStream; import java.io.IOE ...