Objective--C 

一 关键字
@property 定义变量函数
@synthesize 实现变量函数 二 函数
alloc 分配内存
init 初始化
new 替代上面两个函数 分配内存,并且初始化 三 规则 0 变量的修饰符
@public @protected @private @package
@public 实例变量可以被在任何地方访问。
@protected 实例变量能被声明它的类和子类访问,所有没有显式制定范围的实例变量都是@protected的。
@private 实例变量只能被声明它的类访问。
@package 使用runtime modern,一个@package实例变量在实现这个类的可执行文件镜像中实际上是@public的,但是在外面就是@private(runtime请参考苹果文档Runtime Programming Guide)。
这个类型最常用于框架类的实例变量,使用@private太限制,使用@protected或者@public又太开放。 1 类的实例成员变量(非静态变量)
赋值/取值 通常可以有三种方式,需要注意的是给字符串赋值时需要在字符串前加前缀 @ ;还有就是这些变量的访问只能在非静态函数转中访问;
A 对象.成员变量 @protected @public @private
B 对象->成员变量 @public
C [对象 成员变量set/get函数] @public @protected @private 2 类的静态变量
A Objective-C自身时不支持静态变量的,但是由于ObjectiveC是C语言的超类,所以可以使用C语言的static关键字来创建全局变量,全局变量跟Java里的static变量是一样的,只有在类第一次加载的时候才初始化,知道程序被销毁才被释放掉
B 静态变量的调用都必须在静态方法中,无论是赋值还是取值
C static静态变量还可以在方法内定义,只不过在方法内定义的static静态变量只能在方法内调用,方法外无法调用。

3 动态函数
A 标识符 -
B 调用方式 [实例化对象 函数]
C 实例方法在堆栈上
D 不能调用静态函数 4 静态函数
A 标识符 +
B 调用方式 [类 函数]
C 静态方法在堆上分配内存
D 不能调用非静态函数,其实也不是,假如在.h中没有定义,是不能调用的; 5 静态方法与实例方法区分
A 静态方法常驻内存,实例方法不是,所以静态方法效率高但占内存。事实上,方法都是一样的,在加载时机和占用内存上,静态方法和实例方法是一样的,在类型第一次被使用时加载。调用的速度基本上没有差别
B 静态方法在堆上分配内存,实例方法在堆栈上。事实上所有的方法都不可能在堆或者堆栈上分配内存,方法作为代码是被加载到特殊的代码内存区域,这个内存区域是不可写的
C 实例方法需要先创建实例才可以调用,比较麻烦,静态方法不用,比较简单。
D 静态方法是静态绑定到子类,不是被继承。
E 一般使用频繁的方法用静态方法,用的少的方法用动态的。静态的速度快,占内存。动态的速度相对慢些,但调用完后,立即释放类,可以节省内存,可以根据自己的需要选择是用动态方法还是静态方法。
F 静态方法修改的是类的状态,而对象修改的是各个对象的状态,这点也是它们重要的区别
G 类的实例化调用是在类的生命周期中存在,当类没有了以后,对应的实例也就没有了,对应的方法也就没有了,静态类不然,只要你引用了那个静态类的命名空间,他就会一直存在,知道你退出系统。 6 alloc\init 与 new
A 在实际开发中很少会用到new,一般创建对象咱们看到的全是[[className alloc] init]
B 区别只在于alloc分配内存的时候使用了zone 它是给对象分配内存的时候,把关联的对象分配到一个相邻的内存区域内,以便于调用时消耗很少的代价,提升了程序处理速度;
C 而为什么不推荐使用new?如果使用new的话,初始化方法被固定死只能调用init. 而你想调用initXXX怎么办?没门儿
D 采用new的方式只能采用默认的init方法完成初始化,采用alloc的方式可以用其他定制的初始化方法。 7 @property @synthesize
A 作用 简化属性变量的SET,GET
B 简单语法语法
B1 @property 数据类型 变量名; 在.h 文件中;
B2 @synthesize 变量名;
C 复杂语法
C1 如果事先没有在{}中注册成员变量 _A,但是用@property定义了成员变量_A,那么系统会生成成员变量_A,但是该成员变量的是作用域是Private,所以了就不能用 对象->成员变量 来调用了 这个更为简洁
C2 如果事先已经在{}中注册成员变量 _A,而且用@property定义了成员变量_A,那么系统会使用{}中成员变量_A, 而且必须在.m文件中用@synthesize实现,不然系统会报警告, 作用域以{}中的为标准,这个更为传统,严谨
D 属性
声明property的语法为:
@property (参数) 类型 名字;这里的参数主要分为三类:
读写属性(readwrite/readonly)
setter语意(assign/retain/copy)
原子性atomicity(nonatomic)
D1 readwrite 默认属性 有get/set方法
D2 readonly 只有get方法,没有set方法 所以它不可以和 copy/retain/assign组合使用
D3 nonatomic atomic和nonatomic用来决定编译器生成的getter和setter是否为原子操作。在多线程环境下,原子操作是必要的,否则有可能引起错误的结果
I, 当一个变量声明为nonatomic时,意味着多个线程可以同时对其进行访问
II, 当一个变量声明为nonatomic时,它是非线程安全型,访问速度快;
III, 当一个变量声明为nonatomic时,当两个不同的线程对其访问时,容易失控。
D4 atomicity 默认属性 线程安全原子操作
I,当一个变量声明为atomic时,意味着在多线程中只能有一个线程能对它进行访问
II,当一个变量声明为atomic时,该变量为线程安全型,但是会影响访问速度,
III 当一个变量声明为atomic时,在非ARC编译环境下,需要设置访问锁来保证对该变量进行正确的get/set
D5 assign 简单赋值,不更改索引计数 对基础数据类型 (例如NSInteger,CGFloat)和C数据类型(int, float, double, char, 等)
            I 用于基本数据类型
D6 retain: 与strong相对应,使用了引用计数,retain+1,release -1;当引用 计数为0时,dealloc会被调用,内存被释放
            I 通常用于非字符串对象
D7 copy用于非共享内存时,每个指针有自己的内存空间
            I 通常用于字符串对象
        

ISO 学习笔记 2015-03-15的更多相关文章

  1. 【Ext.Net学习笔记】03:Ext.Net DirectEvents用法详解、DirectMethods用法详解

    Ext.Net通过DirectEvents进行服务器端异步的事件处理.[Ext.Net学习笔记]02:Ext.Net用法概览.Ext.Net MessageBus用法.Ext.Net布局 中已经简单的 ...

  2. Duilib学习笔记《03》— 控件使用

    在前面已经对duilib有个一个基本的了解,并且创建了简单的空白窗体.这仅仅只是一个开始,如何去创建一个绚丽多彩的界面呢?这就需要一些控件元素(按钮.文本框.列表框等等)来完善. 一. Duilib控 ...

  3. Fortran学习笔记:03 数组(Array)

    Fortran学习笔记目录 书接上回:Fortran学习笔记:02 流控制语句 数组(Array) 定义数组 一维数组 program main implicit none integer :: i ...

  4. Java学习笔记(03)

    一.回顾运算符: 一.控制语句 1.1 顺序结构 (最常见的) 特点:代码从上往下依次执行

  5. 《深入Java虚拟机学习笔记》- 第15章 对象和数组

    1.针对对象的操作码 实例化一个新对象需要通过new操作码来实现. 对象的创建 操作码 操作数 说明 new index 在堆中创建一个新的对象,将其引用压入栈 new操作码后面紧跟一个无符号16位数 ...

  6. 《Effective C++ 》学习笔记——条款03

    ***************************************转载请注明出处:http://blog.csdn.net/lttree************************** ...

  7. 数据分析---《Python for Data Analysis》学习笔记【03】

    <Python for Data Analysis>一书由Wes Mckinney所著,中文译名是<利用Python进行数据分析>.这里记录一下学习过程,其中有些方法和书中不同 ...

  8. 斯坦福CS231n—深度学习与计算机视觉----学习笔记 课时14&&15

    课时14 卷积神经网络详解(上) CNN处理的是一些数据块,在这之间有很多层,一系列的层将输入数据变换为输出数据,所以完成操作的中间量不仅是NN时候讲的那些向量,而是立体结构,有宽,高和深度,在整个计 ...

  9. 《NVM-Express-1_4-2019.06.10-Ratified》学习笔记(6.15)-- 写命令

    6.15 Write command 写命令 写命令写数据和元数据,如果适用介质,发到逻辑块相应的I/O controller.主机也可以指定保护信息,作为操作的一部分包含进来. 命令用Command ...

  10. 【c++ Prime 学习笔记】第15章 面向对象程序设计

    15.1 OOP:概述 面向对象程序设计(object-oriented programming)的核心思想是:数据抽象.继承.动态绑定 使用数据抽象,可将类的接口与实现分离 使用继承,可定义相似的类 ...

随机推荐

  1. 组合数学及其应用——格路径与Schroder数

    格路径问题是探讨在如下所示中的一个格点图上,从(0,0)位置到达(p,q)所有可能的情况数.我们称这样的通路为一条格路径. 格点图: · · · · · · · · · · · · · · · · · ...

  2. java动态编程库,利用动态编程打印运行时调用全景(函数调用关系链)

    如果是一般java程序,不追求性能极致,想使用方便,推荐使用 Javassist 库. 如果是android程序,或者一般java程序欲追求性能极限,推荐使用 asm for java 及 asmde ...

  3. Linux学习笔记——软件包管理

    1.RPM包的管理 RPM软件包的一个例子: sudo-1.7.2p1-5.el5.i386.rpm 这个rpm包名包括软件名sudo,版本号1.7.2p1,发行号5.el5,和硬件平台i386 (1 ...

  4. 【JAVA - SSM】之MyBatis查询缓存

    为了减轻数据压力,提高数据库的性能,我们往往会需要使用缓存.MyBatis为我们提供了一级缓存和二级缓存. (1)一级缓存是SqlSession级别的缓存,在操作数据库的时候需要创建一个SqlSess ...

  5. -bash: ls: command not found

    在iMac下ls既然command not found,查找了下 原因:在设置环境变量时,编辑profile文件没有写正确,导致在命令行下 ls等命令不能够识别.解决方案: 直接在控制台下  expo ...

  6. VisJS 随机图

    <!doctype html> <html> <head> <title>Random nodes</title> <style ty ...

  7. 导出项目为jar包

  8. 读完了csapp(中文名:深入理解计算机系统)

    上个星期最终把csapp看完了. 我买的是中文版的,由于除了貌似评价不错以外,由于涉及到些自己不了解的底层东西,怕是看英文会云里雾里.如今看来,大概不能算是个长处,可是的确可以加快我的看书速度,否则一 ...

  9. 用Python和FFmpeg查找大码率的视频文件

    用Python和FFmpeg查找大码率的视频文件 本文使用Python2.7, 这个工作分两步 遍历目录下的视频文件 用ffprobe获取是视频文件的码率信息 用ffprobe 获取json格式的视频 ...

  10. CopyU!下一次更新将增加对设备厂商及型号的识别!

    CopyU!下一版本的更新将加入对设备厂商及型号的识别功能,当用户连接设备时,CopyU!将能够辨别出设备的详细型号等,能够在一定程度上帮助用户发现问题设备或仿冒设备. 敬请期待即将到来的新更新!