2019独角兽企业重金招聘Python工程师标准>>>

占坑

1,多继承

(新到一个公司,老同事们都使唤你干活,你什么活都干,过了一段时间)

你发现你既可以做android,你也可以做ios,这就是多继承的表现

Objective C的多继承特性通过 Category来实现

2,多态

(公司有钱了,你收了两个徒弟)

同样的客户端,一个做ios,一个做android,(跟领导说这都是你做的),这就是多态

Objective C的多态特性通过Selector来实现

3, 变量访问范围前缀,有四种

@private 实例的.m代码里能访问到

@protected  实例的.m代码里和实例的子类的.m代码里能访问到它

@package  你自己的代码里,非静态库的应用就应该能访问到它,不过要用myobject->packageVar这种方式来访问。

@public  no limits.到处都能看到它。

所以我说:

@private是小孩的玩具,自己玩儿

@protected是爸妈的东东,自己和孩子都让用

@package是祖业,叔伯婶婶以及员工都有访问权。

@public是公共设施,谁都能用

4,深拷贝与浅拷贝

浅拷贝--指针引用,retainCount+1哦。深拷贝--retainCount不变,另外开辟内存空间,新起炉灶。

非容器类对象的深浅规律----趋于深,遇到mutable就变深,不管前后

(1)不可变对象的copy是浅拷贝
(2)不可变对象的mutableCopy是深拷贝
(3)可变对象的copy和mutableCopy是深拷贝
判断依据是copy后内存地址是否还一样

容器类对象的深浅规律---除了重新开辟 或者 NSKeyedUnarchiver来搞一下,都是浅,趋于浅。

(1)NSArray的copy和mutableCopy都是浅拷贝

NSArray *copyArray=[[NSArray alloc] initWithArray: array copyItems: YES];//是浅拷贝

NSArray *copyArray = [NSArray arrayWithArray:array];//也是是浅拷贝

NSMutableArray *copyArray = (NSMutableArray*)CFPropertyListCreateDeepCopy(kCFAllocatorDefault, (CFPropertyListRef)array, kCFPropertyListMutableContainers);//也是是浅拷贝

即,array里面元素都是指针引用。小心

(2)只有这个是深拷贝,NSArray* trueDeepCopyArray = [NSKeyedUnarchiver unarchiveObjectWithData:
                                [NSKeyedArchiver archivedDataWithRootObject: array]];

ps:NSArray的mutableCopy只能说Array是可以变的,可以addObject什么的,但是array里的元素很可能都还是immutable的

5,NSString这货

NSString这货有些地方很矫情。

比如:

只要代码里面出现了@"string1"这样的常量,不管是啥变量啥指针引用它,其实都特么指向同一个内存空间,而且不能释放它。

NSString *str1 = @"string1";

NSString *str2 = @"string1";

上面的str1,str2都指向同块静态内存,别指望你自己能[str1 dealloc],[str2 dealloc],很节省空间的感觉吧。

NSString *str3 = [NSString initWithString:@"string1" ];

[str3 dealloc];也百分百爆异常.

但是下面这个:

NSString *str4 =[NSString initWithFormat:@"string1"];

initWithFormat是可以让你dealloc的,[str4 dealloc] no exception。

所以可见,常量御姐@"string1"遇到initWithFormat就格式化成软妹子了.

[NSString initWithFormat:@"string1"];

是在静态空间里分配了一块@"string1",另外在堆里又分配了一块拷贝了@"string1"

dealloc的是堆上的那块。

[NSString initWithFormat:@"string1"];

所以,

[NSString initWithFormat:@"string1"];

占的空间更多了,并不推荐用,用

[NSString initWithString:@"string1"];来替代好些的。

在这里,只要是@"string1"搞出来的对象,他们的retainCount都为-1或者Int_MAX,因为是不可让你dealloc的了,这样也容易理解。

所以上面罗里吧嗦这么多,讲了三个特征

(1)@"string1"这种常量放在静态空间,不能dealloc,只要字符串值相同,全程序有且只有一份它的空间。

(2)initWithString :@"string1" 和  [initWithString:str1]在静态空间的,这样初始化对象的不能dealloc

initWithString:str2,str2在堆上,这样初始化的对象可以dealloc.

(3)initWithFormat初始化出来的可以dealloc.

转载于:https://my.oschina.net/openlab/blog/128851

Objective C的那点小语法相关推荐

  1. 常用SQL Server 小语法、函数 等的实例汇总

    2019独角兽企业重金招聘Python工程师标准>>> 重点内容常用SQL Serve函数及语法的部分实例汇总 本文介绍SQL Server 中常用的几种函数: 函数一:ISNULL ...

  2. 初入门的C++小语法

    这篇博客在写的时候,也是本人接触C++语言的时候,为了打好自己的基础,想在以后找一个差不多的工作,所以会交流分享一下自己在初学C++的一点小心得,希望有初学的老哥多多指教.话不多说,进入正题. 1.命 ...

  3. vue.js的一些小语法v-bind,v-if,v-show,v-else

    知识点: v-bind 动态绑定标签属性 v-bind 可简写为 : 使用v-bind 绑定class和内联样式 使用v-if,v-show,v-else进行条件渲染 <template> ...

  4. Python中的一些小语法

    目录: 生成随机数 将一个字符串变为datetime类型,并且获取星期几 1.生成随机数 假设我们要操作的list如下: >>> import random >>> ...

  5. Flutter学习之Dart语法特性

    一.前言 第一天把Flutter环境搭建了,并简单实现第运行第一个Flutter项目,感觉很不错,一些基本操作和原生体验差不多.用Flutter框架写过App项目的开发者都知道,Flutter是一个使 ...

  6. 210506阶段四Python基本语法

    目录 一.学习的知识点 python和C/C++区别 应用领域 Python Python语法 变量 输入 函数 成员运算符 条件语句 循环语句 二.上课没有听懂或者没有理解的地方 三.当天学习的收获 ...

  7. R Markdown语法集锦

    R Markdown语法集锦   作为一个编辑语法方面的小白,最近由于老师布置的作业,我开始学习了一下R Markdown,其实R Markdown也是Markdown语言,只是把Markdown的功 ...

  8. 从此走上一条iOS程序猿不归路。。。

    新的城市,新的生活!前不久刚刚结束了苦逼的面试找工作之旅,期间也小有收货,如今正处年底工作闲暇之余,将前一阵子陆陆续续的总结整理了一下,本人菜鸟程序猿一只,水平有限,本文总结的知识不算深入,比较浅显, ...

  9. ios 与web服务器传值_中高级iOS大厂面试宝典,拿到offer率80%,金三银四将是你的新起点...

    引言 过年之后相信有一部分的人,早已磨刀霍霍向大厂.势必要大展拳脚,必将在大厂内创出一片天地.但是,想必大家都知道:最近几年的最严重的互联网寒冬来临,各位兄弟都会说"江湖再见".耳 ...

最新文章

  1. 模型融合方法最全总结!
  2. 使用睡袋_在户外一个关乎睡眠的重要因素——睡袋
  3. 数据库还原失败System.Data.SqlClient.SqlError: 无法执行 BACKUP LOG,因为当前没有数据库备份...
  4. Vue.js 学习视频和书籍【推荐】
  5. Android 6.0以上运行权限及RxPermissions的使用
  6. 白帽子学Linux教程,网络安全工程师与白帽子***教你Kali Linux***:内网***实战技巧...
  7. 两个特征是独立好还是正相关好_stata速学|相关分析|主成分分析|因子分析
  8. MYSQL limit 分页
  9. CKEditor设置背景图片及宽高
  10. Maven SCM Release版本控制与发布
  11. 项目管理必备文档大全:这14个项目文档你还不会写?
  12. c语言写长方形体积公式是什么,长方体的体积公式 长方体的体积公式是什么
  13. 可编辑!热门动态表情包!
  14. 电源适配器DC插头规格
  15. 北京游玩攻略,-怎么游玩清华北大
  16. 原神启动器无法打开,提示“no Qt platform plugin could be initialized”的解决办法
  17. 【Java入门】--键盘输入月份,控制台返回对应英文月份。
  18. 使用注解失败的原因及解决方法
  19. html页面中鼠标悬停更换图片
  20. 干扰:内部干扰/外部干扰/杂散干扰/互调干扰/阻塞干扰

热门文章

  1. 7-188 编程团体赛 (20 分)
  2. 4004-基于邻接矩阵的新顶点的增加(C++,附思路)
  3. 【图像处理-直方图】
  4. python template languages_Python template.TemplateSyntaxError方法代碼示例
  5. body curl命令测试post_HTTP接口调试利器!4.8万Star的HTTP命令行客户端!
  6. html5上传使用FileReader,Promise图片预览
  7. 大数据分析——零售业
  8. 自己定义html中a标签的title提示tooltip
  9. JSONArray传值的使用小结
  10. 软考一般知识之数据库