Objective-C基础知识点总结

1、在OC中,[ ]是用来调方法,. 也是找方法,主要是找get方法,->是用来找变量的。_p是直接访问实例变量。

2、在OC中,实例变量是保护类,不可以在外部访问,但是,在使用@property和@synthesize时,就相当于有了set函数和get函数。

3、build  setting中将autorelease reference counting 自动引用计数器设置为no,即开启MRC。

4、深拷贝:增加了一个指针并重新开辟了一块空间,这个增加的指针指向了新开辟的空间,采用这种方式的拷贝,防止出现重复释放内存。copy就是深拷贝。

浅拷贝:增加了一个指针指向一个已经存在的内存空间。retain就是一个浅拷贝。

5、@property的参数是readonly时,不会生成set函数,所以就不能用self来调用,直接使用_+变量名

6、atomic:对每一个变量进行加锁操作,(共同抢夺同一块资源,例如“内存,”),加锁操作是能够使资源被一个变量使用,不会出现因为相互等待而出现“死锁”,浪费资源(调配使用,分配使用顺序,耗时)多用在单线程,偶尔也会用在多线程上。

nonatomic:防止给变量加锁,节约系统资源。

加锁:就是线程同步,避免多个线程同时访问全局变量导致数据被破坏,某个线程加了锁之后,操作完再把锁释放,期间要是有其他线程想去访问被加锁的变量就需要先拿到锁,而锁没有释放的话,就只有等待,直到拥有锁的线程把锁释放,表示可以操作它了

7、前向声明:组合类的头文件处使用前向声明,在.m文件中导入头文件。

8、线程安全:代码运行在多线程环境下和运行在单线程曾环境下结果是一样的。

9、组合类:组合类在.h文件中,使用参数retain。

Strong:系统提供的、自定义的指针使用。与MRC情况下的retain使用情况类似。

Weak:弱引用。只要有一个指针不指向它,就释放掉内存。

Copy:在ARC下也可以使用,相当于assign。但是使用copy,需要实现nscopying协议中的copywithzone方法:

MRC下使用retain、copy, 但是copy在ARC下也可以使用。

10、autorelease加长了对象的生命周期,让对象的释放时机延长,浪费了内存,在MRC下尽量使用release,但是具体使用,一般是在多个文件调用这个对象,不确定什么时候释放的时候,才使用autorelease。

11、在Object-C中使用结构体和枚举:(1)访问结构体变量的某个成员,使用.成员访问运算符。(2)结构体指针->结构体成员名。(3)(*结构体指针).结构体成员名

12、typedef struct OC_object{

Class isa;

}* id;

id :本身的类型可以转化为任何一种对象,作为返回值是一个确定的类型。d可以用来表示任意一个对象,它是一个 objc_object 结构类型的指针,其第一个成员是一个 objc_class 结构类型的指针。在返回值类型、行参类型、参数类型时使用。

isa:实例对象的isa指向它的类。一个对象(Object)的isa指向了这个对象的类(Class),而这个对象的类(Class)的isa指向了metaclass。Object-C对类对象与实例对象中的 isa 所指向的类结构作了不同的命名:类对象中的 isa 指向类结构被称作 metaclass,metaclass 存储类的static类成员变量与static类成员方法(+开头的方法);实例对象中的 isa 指向类结构称作 class(普通的),class 结构存储类的普通成员变量与普通成员方法(-开头的方法).

类的实例对象的 isa 指向它的类;类的 isa 指向该类的 metaclass;类的 super_class 指向其父类,如果该类为根类则值为 NULL。metaclass 的 isa 指向根 metaclass,如果该 metaclass 是根 metaclass 则指向自身;metaclass 的 super_class 指向父 metaclass,如果该 metaclass 是根 metaclass 则指向该 metaclass 对应的类;Object-C 为每个类的定义生成两个 objc_class ,一个普通的 class,另一个即 metaclass。我们可以在运行期创建这两个 objc_class 数据结构,然后使用 objc_addClass将 class 注册到运行时系统中,以此实现动态地创建一个新的类。

13、多态:用一个父类的指针指向子类的对象,在运行时调用到正确的版本。

(1)用一个基类的指针指向一个子类

(2)将父类指针作为形参,可以使用其子类和本身作为参数传递

(3)在复合类中,最好引用高层次的类当做类的成员变量

14、自动释放池:(1)一定要在自动释放池中调用autorelease,才会将对象放入自动释放池中。(2)在自动释放池中,一定要调autorelease,才会将对象放入自动释放池中。(3)只要在自动释放池中调用autorelease,就会将对象放入自动释放池中。

15、分类和扩展:分类可以为类添加方法,但是不可以添加变量。扩展既可以添加方法,又可以添加变量。但是如果是单独写的一个扩展文件,那就可以访问到变量和方法。如果将类的扩展写到类的.m文件中,既不可以访问到变量,也不可以访问到方法。

16、字符串操作:

17、NSArray创建使用NSArray *ary = [[NSArray alloc] initWithObjects:@”jeo”,@”jun”,nil];在多个文件中使用时,自己手动开辟,不会被回收。而NSArray *arr = [NSArray arryayWithObjects:@”jeo”,@”jun”,nil];也可以使用NSArray *ary = @[@”hello”,@”world”];(这种是在iOS8之后出现的)

是系统管理的,如果在多文件中使用,会造成程序挂掉。

某个对象在数组中是否存在,返回BOOL值:[arr containsObject:@”jeo”];

对数组进行排序,使用系统的方法:NSArray *ary = [arr sortedArrayUsingSelector:@selector(compare:)];因为该方法的排序不影响原数组的顺序,需要用新的数组进行接收。

快速遍历数组;

for(id num in ary){NSLog(@”%@”,num);}数组中存在不同类型的对象,使用id最好,可以接收任何类型的对象。

18、字典:没有先后顺序之分,因为字典是无序的

NSDictionary *d= @{@”1”:@”123”,@”2”:@”456”};

NSString *str = d[@”1”];

NSDictionary *d = [NSDictonary dictionaryWithObjectsAndKeys:@”123”,@”1”,@”456”,@”2”,nil];

NSString *str = [d objectForKey:@”1”];

通过NSArray *ary = [d allValues];可以输出所有的值,同理调用[d allKeys]可以调出所有的键。

NSDictoinary *d = [NSDictonary dictionaryWithAllValues:@”123”,@”456” forKeys:@”1”,@“2”];也可以声明一个字典

NSMutableDictonary *dic = [NSMutableDictonary dictionary];

[dic setObject:@”123” forKey:@”1”];

[dic setObject:@”456” forKey:@”2”];为字典添加键值对

[dic removeObjetsForKeys:[NSArray arrayWithObjects:@”1”]];删除某个值

for(id object in [dic allValues]){NSLog(@”%@”, object);}

快速遍历字典,并取出其中的值。

18、文件存储存储的是基本的对象,自己写的类和对象是写不进去的,想要写进自己编写的类,就要遵循NSCoding协议,对文件总的变量编解码,实现-(void)encodeWithCoder:(NSCode *)aCoder;进行编码

-(instanceType)initWithCoder:(NSCode *)aDecoder;进行解码

但是编码的都是对象,要将基础类型的变量转换为对象。然后将类的对象存入文件(归档):Person *p = [[Person alloc] init];

[NSKeyedArchiver archiveRootObjectObject:p toFile:str];

Person *p = [NSDeyedUnArchiver unArchiveObjectWithFile:str];

创建文件管理类:NSFileManager,一般使用defaultManager,常使用的类:-(NSData *)contentsAtPath:(NSString *)path;属性currentDirectionaryPath管理目录。NSHomeDirectionary获取主目录,而[[NSFileManager defaultManager] currentDirectionary]获取当前目录。

19、循环引用:

1、循环引用其中一个变量使用assign模式

2、在dealloc中为assign模式的不用release

时间: 2024-12-15 01:54:25

Objective-C基础知识点总结的相关文章

黑马程序员——Java I/O流基础知识点(File类)

File工具 File类就是用俩将文件或者文件夹封装对象,弥补流对象的不足--流只能操作数据,不能操作文件夹的 封装的是路径!!! 构造方法演示 1.可以将已有的未出现的文件或者文件夹封装成对象. File f1=new File("c:\\abc\\a.txt"): File f2=new File("d:\\abc","ab.txt"打印,会打印路径.:目录分隔符,为了更好地跨平台File. File类常见功能 1,创建 createNewF

HTML5基础知识点

今天了解html,下面是我分享的有关html的基础知识点: ①什么是html? html是一种超文本标记语言(超文本标记标签) ②html标签是html中的最基本单位 也是最重要的部分,html标签分为单标签和双标签. 单标签</>   双标签<></> html中的一些常见标签 1,<br/>换行标签    2,<hr/>水平分割线标签   3,<p></p>段落标签     4,<pre></pre&

C# .Net基础知识点解答

C# .Net基础知识点解答 1. 什么是.NET?什么是CLI?什么是CLR?IL是什么?JIT是什么,它是如何工作的?GC是什么,简述一下GC的工作方式? 通俗的讲,.Net是微软开发应用程序的一个平台: CLI是Common Language Infrastructure,是公共语言架构: CLR是Common Language Runtime,即公共语言运行时: IL是.Net编译器产生的中间代码,称为通用中间语言CIL(Common Intermediate Language),CIL

js基础知识点收集

js基础知识点收集 js常用基本类型 function show(x) { console.log(typeof(x)); // undefined console.log(typeof(10)); // number console.log(typeof('abc')); // string console.log(typeof(true)); // boolean console.log(typeof([])); // object console.log(typeof(function (

js基础知识点总结

js基础知识点总结 如何在一个网站或者一个页面,去书写你的js代码:1.js的分层(功能):jquery(tool) 组件(ui) 应用(app),mvc(backboneJs)2.js的规划():避免全局变量和方法(命名空间,闭包,面向对象),模块化(seaJs,requireJs) 常用内部类:Data Array Math String HTML属性,CSS属性HTML:属性.HTML属性="值":CSS:对象.style.CSS属性="值"; class和f

JavaScript语言基础知识点图示

原文:JavaScript语言基础知识点图示 一位牛人归纳的JavaScript 语言基础知识点图示. 1.JavaScript 数据类型 2.JavaScript 变量 3.Javascript 运算符 4.JavaScript 数组 5.JavaScript 流程控制 6.JavaScript 函数基础 7.DOM 基本操作 8.Window 对象 9.JavaScript 字符串函数 10.正则表达式 JavaScript语言基础知识点图示,布布扣,bubuko.com

Spring4.x 基础知识点

# Spring4.x 基础知识点## 第二章 快速入门- 一般情况下,需要在业务模块包下进一步按分层模块划分子包,如user\dao.user\service.viewspace\dao.viewspace\service等.对于由若干独立子系统组成的大型应用,在业务分层包前还需要加上子系统的前缀.包的规划对于大型应用非常重要,它直接关系到应用部署和分发的便利性.- 在配置文件的定义上,一般也是按模块进行划分,一定程度上降低争用.- 在拼接SQL语句的句前和句后都加一个空格,这样避免分行SQL

fastclick 源码注解及一些基础知识点

在移动端,网页上的点击穿透问题导致了非常糟糕的用户体验.那么该如何解决这个问题呢? 问题产生的原因 移动端浏览器的点击事件存在300ms的延迟执行,这个延迟是由于移动端需要通过在这个时间段用户是否两次触摸屏幕而触发放大屏幕的功能.那么由于click事件将延迟300ms的存在,开发者在页面上做一些交互的时候往往会导致点击穿透问题(可以能是层之间的,也可以是页面之间的). 解决问题 之前遇到这个问题的时候,有在网上看了一些关于解决移动端点击穿透的问题,也跟着网上提出的方式进行了各项测试,最终还是觉得

jQuery基础知识点(下)

在实际开发中,jQuery的实践性非常强大.上一篇本人已经整理出了一部分基础知识点,该文即是对以上的补充和扩展. 1.表单值的操作 1 //获取文本框的值 2 //txt.value 3 var val = $("#txt").val(); //没有参数表示获取值 4 //设置文本框的值 5 //txt.value = "123123"; 6 $("#txt").val("这是val设置的值"); // 有参数表示设置值 2.

.NET基础知识点

.NET基础知识点   l  .Net平台  .Net FrameWork框架   l  .Net FrameWork框架提供了一个稳定的运行环境,:来保障我们.Net平台正常的运转   l  两种交互模式 C/S:要求客户的电脑上必须要安装一个客户端:qq.360.快播等..... B/S:要求客户的电脑上只需要安装一个浏览器   l  书写代码需要注意的地方: n  代码中出现的所有标点都是英文半角 shift键快速切换中文半角和英文半角 n  shift+空格切换全角/半角 n  在c#代