objective-c学习笔记2
Objective-c学习笔记
1.cocoa的对象初始化一般使用alloc和init两个方法,不适用new,其中alloc用于分配内存,init用于初始化,因为初始化方法返回的对象可能和分配的对象不同,如下
[[类名 alloc] init]
2.初始化方法init的编写一般会用到super关键字,因为初始化对象之前必须先初始化父类,并检查父类的初始化是否成功,如下
if(self = [super init]){dosomething}//这一句说明返回的不是nil,可以继续进行下去
else return self;//返回的是nil,直接不用了
3.mac的很多类都包含有便利初始化函数,调用这些初始化方法的时候请记得alloc
[[类名 alloc] 便利初始化方法]
4.OC2.0中引入了属性(@property),简化了代码的编写量,(感觉上类似于C#的自动存取方法)
5.使用属性定义接口
@interface
{
type1 var;
type2 var2;
}
@property type1 var;
@property type2 var2;
@end
6.使用属性定义的变量,可以通过编译器内部自动建立的存取方法来访问.
7.在xcode4.5之前,使用@property定义之后,在对应的实现文件@implementation中要使用@synthesize申明一次相应的变量,4.5自后就不需要了
8.如果一个变量能在子类中访问,那么在@interface中声明@property,并定义变量,如果不想子类访问,在@interface中只定义@property,不定义变量,在@implementation定义变量,如下
@implementation
{
变量定义
}
@synthesize 变量
@end
9.点表达式在编译器中实际上是调用的属性访问方法,而不是直接访问的属性,点表达式出现在等号左边,则为写 右边,则为读
10.通过@synthesize指令可以为使用@property的变量定义别名,例如外部导出name1,实际的变量是name2,那么@property声明name1,在@synthesize中定义 @synthesize name1 = name2
11.可以定义变量的读写权限,使用@porperty定义的时候声明,例如
@porperty (readwrite) type var
@porperty (readonly) type var
12.当使用@porperty声明了属性但是自己又不想用系统自动生成的方法的时候,使用@dynamic可以屏蔽系统自动生成的属性方法,转而自己定义
13.使用@porperty 也可以为存取方法重命名
14.为现有的类添加新的方法的办法叫做类别,定义方式为
@interface 源类名(类别名)
添加的新方法名
@end
15.类别只能添加新的方法,不能添加新的变量,同时类别有着名称冲突的隐患
16.类扩展,类扩展是类别的一种特殊形式,类扩展只能放在类的相关文件中,.h .m,他可以扩展类的变量,还能修改类的访问属性,但是,类扩展是没有名字的,也就是说,类扩展只能供内部使用,这种方式可以很方便的维护代码
17.类别可以实现源代码的分散管理,可以访问其继承的类的实例变量
18.cocoa没有真正的私有方法,即使该对象没有声明该方法,只要实现中有就可以调用
19.委托是指,一个对象由另一个类请求执行某些工作,比如有一个服务类,他有一个委托对象A,那么服务类会请求对象A是否去做某些工作
20.委托对象只需要实现打算调用的方法
21.被发送给委托对象的方法可以声明为NSObject的类别
22.响应选择器 (没弄明白)
23.正式的协议是包含有方法和属性的名称列表,必须显式的调用
24.采用协议的办法是在类的interface中列出协议的名称,采用协议之后,类就要遵守该协议,采用协议意味着承诺实现该协议的所有方法
25.协议声明使用@protocol关键字,如下
@protocol 协议名称
方法 定义
@end
26.协议可以继承,如下
@protocol 协议名称<父协议名称>
方法定义
@end
27.继承的协议被类使用的时候,类必须要实现父协议和子协议的全部方法,NSObject类符合NSObject协议,所以自己定的协议可以或者说最好是继承NSObject协议
28.在类中采用协议使用<>,如下
@interface 类名:父类名<协议1,协议2>
@end
29.objective-c的对象复制分为浅复制和深复制,其中浅复制只复制指针,深复制复制内容
30.可以在使用的数据类型和方法参数中指定协议名称,如果是数据类型,那么这个数据的类应该符合指定的协议,如果是方法返回值,那么返回值的类也应该符合指定的协议如下
-void function:(id<协议名称>)var;
31.objectivec2.0中增加了两个新的特性,@option和@required,主要使用在协议的定义中,使用@optional定义的方法,类在使用协议的时候可以可选的实现,使用@required的方法,类在使用协议的时候必须实现
32.委托,就是指一个类中包含一个委托对象,该委托对象必须实现一个指定的协议,类靠协议来约束委托对象的行为.
objective-c学习笔记2的更多相关文章
- Objective -C学习笔记之字典
//字典:(关键字 值) // NSArray *array = [NSArray array];//空数组 // NSDictionary *dictionary = [NSDictionary d ...
- Objective -C学习笔记 之copy(复制)
//自定义类对象实现copy需要遵守copy协议(否则程序崩溃),实现必须实现的协议方法,里面的代码就决定了你的copy是深是浅 #import <Foundation/Foundation.h ...
- objc_msgSend消息传递学习笔记 – 消息转发
该文是 objc_msgSend消息传递学习笔记 – 对象方法消息传递流程 的基础上继续探究源码,请先阅读上文. 消息转发机制(message forwarding) Objective-C 在调用对 ...
- ufldl学习笔记和编程作业:Softmax Regression(softmax回报)
ufldl学习笔记与编程作业:Softmax Regression(softmax回归) ufldl出了新教程.感觉比之前的好,从基础讲起.系统清晰,又有编程实践. 在deep learning高质量 ...
- ESP32学习笔记(一) 环境搭建与下载
ESP32学习笔记(一) 环境搭建与下载 作者:Nevel 博客:nevel.cnblogs.com 转载请保留出处 前几天刚入手了ESP32模块,趁着放假有时间,我们先把ESP32的编译环境搭建好 ...
- LDA主题模型学习笔记5:C源代码理解
1.说明 本文对LDA原始论文的作者所提供的C代码中LDA的主要逻辑部分做凝视,原代码可在这里下载到:https://github.com/Blei-Lab/lda-c 这份代码实现论文<Lat ...
- 深度学习笔记(七)SSD 论文阅读笔记简化
一. 算法概述 本文提出的SSD算法是一种直接预测目标类别和bounding box的多目标检测算法.与faster rcnn相比,该算法没有生成 proposal 的过程,这就极大提高了检测速度.针 ...
- 深度学习笔记(七)SSD 论文阅读笔记
一. 算法概述 本文提出的SSD算法是一种直接预测目标类别和bounding box的多目标检测算法.与faster rcnn相比,该算法没有生成 proposal 的过程,这就极大提高了检测速度.针 ...
- ufldl学习笔记与编程作业:Softmax Regression(vectorization加速)
ufldl学习笔记与编程作业:Softmax Regression(vectorization加速) ufldl出了新教程,感觉比之前的好.从基础讲起.系统清晰,又有编程实践. 在deep learn ...
- ufldl学习笔记与编程作业:Logistic Regression(逻辑回归)
ufldl学习笔记与编程作业:Logistic Regression(逻辑回归) ufldl出了新教程,感觉比之前的好,从基础讲起.系统清晰,又有编程实践. 在deep learning高质量群里面听 ...
随机推荐
- OpenGL ES之glUniform函数
函数名: glUniform 功能: 为当前程序对象指定Uniform变量的值.(译者注:注意,由于OpenGL ES由C语言编写,但是C语言不支持函数的重载,所以会有很多名字相同后缀不同的函数版本存 ...
- Hibernate 系列教程10-组成关系
组成关系 在一个员工模型里面需要存入 员工公司所在地址的城市,街道 员工籍贯所在的城市,街道, 此时可以抽取城市,街道变成一个模型即是组成关系 Employee public class Employ ...
- ==与equals()方法的不同
==比较分为两种情况:基本数据类型比较与引用数据类型比较 1.基本数据类型,根据基本数据类型的值是否相等来判断,相等则返回true,不相等则返回false.两端数据类型可以不同,如果转换后的数值相等, ...
- JavaScript(1)——变量、函数声明及作用域
这是我的第一篇博客文章,本人不才,文笔也不好,所以可能写的有点凌乱.有什么不对的地方还望见谅.不过每天进步一小步,总有一天会迈出那一大步.以下内容是我对变量.函数声明及函数表达式.作用域的理解. [变 ...
- 函数FindFirstFile
文件查找 Struct Lnode{ Char table[256]; //保存文件夹名 Struct Lnode*next; } 加文件夹入链表 Lnode *newList; Vo ...
- UVALive 2517 Moving Object Recognition(模拟)
题目看上去很吓人,很高端,但其实很简单,不要被吓到,照搬题目的公式就可以了. 方法:用BFS求出最大块和重心,找出题目公式需要的未知量,然后套到题目公式里就可以求出答案了. 代码: #include& ...
- POJ 1470 Closest Common Ancestors(LCA 最近公共祖先)
其实这是一个裸求LCA的题目,我使用的是离线的Tarjan算法,但是这个题的AC对于我来说却很坎坷……首先是RE,我立马想到数组开小了,然后扩大了数组,MLE了……接着把数组调整适当大小,又交了一发, ...
- HDU 1681 Frobenius(完全背包+标记装满)
一个完全背包,数组两百万,暴力可过 #include<iostream> #include<cstdio> #include<cstring> using name ...
- 关于:hover的一点小问题
今天又用到了:hover这个伪类选择器,一个小问题搞了我好久,就是关于:hover选择的问题, 先看下css代码 .box:hover span { height: 150px; } 接下来是HTML ...
- Django - 用户注册
使用Django工程自动创建的auth_user表来存储用户信息 在app目录下创建forms.py mysite/music/forms.py from django.contrib.auth.mo ...