iOS之各种区别
写在前面:本文持续更新,也欢迎简友提供更多的关于iOS(包括swift)中的区别
1. _ _block和 _ _weak修饰符的区别的:
(1). _ _block不管是ARC还是MRC模式下都可以使用,可以修饰对象,还可以修饰基本数据类型。
(2). _ _weak只能在ARC模式下使用,也只能修饰对象(NSString),不能修饰基本数据类型(int)。
(3). _ _block对象可以在block中被重新赋值, _ _weak不可以。注: 变量对象在block中是只读的,前面用_ _block修饰是为了让block是复制其引用地址来实现对外界变量的访问。
2.assign和weak有什么区别
一 、区别(1).修饰变量类型的区别 weak只可以修饰对象。如果修饰基本数据类型,编译器会报错-“Property with ‘weak’ attribute must be of object type”。assign 可修饰对象,和基本数据类型。当需要修饰对象类型时,MRC时代使用unsafe_unretained。当然,unsafe_unretained也可能产生野指针,所以它名字是"unsafe_”。(2).是否产生野指针的区别 weak不会产生野指针问题。因为weak修饰的对象释放后(引用计数器值为0),指针会自动被置nil,之后再向该对象发消息也不会崩溃。 weak是安全的。assign 如果修饰对象,会产生野指针问题;如果修饰基本数据类型则是安全的。修饰的对象释放后,指针不会自动被置空,此时向对象发消息会崩溃。二、相似都可以修饰对象类型,但是assign修饰对象会存在问题三、总结assign 适用于基本数据类型如int,float,struct等值类型,不适用于引用类型。因为值类型会被放入栈中,遵循先进后出原则,由系统负责管理栈内存。而引用类型会被放入堆中,需要我们自己手动管理内存或通过ARC管理。weak 适用于delegate和block等引用类型,不会导致野指针问题,也不会循环引用,非常安全。当然怎么选择使用assign还是weak,MRC的话只能用assign,在ARC的情况下最好使用weak,因为weak修饰的变量在释放后自动指向nil,防止野指针存在。
3. copy与retain(strong)的区别
谢谢简友 追善的指出, 此条之前的说法的确不够严谨,吾正在详细创造中... 下面先放个图

4.assign和retain的区别
assign就是直接赋值,从而可能引起1中的问题,当数据为int, float等原生类型时,可以使用assign。retain就如2中所述,
使用了引用计数,retain引起引用计数加1, release引起引用计数减1,当引用计数为0时,dealloc函数被调用,内存被回收。
5. extension和category的区别
extension看起来很像一个匿名的category,但是extension和有名字的category几乎完全是两个东西。
extension在编译期决议,它就是类的一部分,在编译期和头文件里的@interface以及实现文件里的@implement一起形成一个完整的类,它伴随类的产生而产生,亦随之一起消亡。extension一般用来隐藏类的私有信息,你必须有一个类的源码才能为一个类添加extension,所以你无法为系统的类比如NSString添加extension。
但是category则完全不一样,它是在运行期决议的。就category和extension的区别来看,我们可以推导出一个明显的事实,extension可以添加实例变量,而category是无法添加实例变量的(因为在运行期,对象的内存布局已经确定,如果添加实例变量就会破坏类的内部布局,这对编译型语言来说是灾难性的)。
6. const和宏(define)的区别
1.define在预处理阶段进行替换,const常量在编译阶段使用
2.define不做类型检查,仅仅进行替换,const常量有数据类型,会执行类型检查
3.define不能调试,const常量可以调试
4.define定义的常量在替换后运行过程中,会不断地占用内存,而const定义的常量存储在数据段,只有一份copy,效率更高。
5.define可以定义一些简单的函数和方法,而const不能
7. id 和 instancetype 的区别
1. instancetype 和 id 都是万能指针,指向对象。
2. 不同点: id在编译的时候不能判断对象的真实类型,instancetype在编译的时候可以判断对象的真实类型 id可以用来定义变量,可以作为返回值类型,可以作为形参类型;instancetype只能作为返回值类型
3. 注意:以后凡是自定义构造方法,返回值类型尽量使用instancetype,不要使用id
8.struct和class的区别
struct是值引用 深拷贝,不可继承,swift更加推荐使用struct。
class是类引用 浅拷贝 可继承
To be continued...
相关文章:

lightoj 1014
lightoj 1014 Ifter Party 链接:http://www.lightoj.com/volume_showproblem.php?problem1014 题意:给你两个数 p, l,求 cha(cha p-l)的约数,当约数大于 l 时,按从小到大输出 思路:…

poj 2681 字符串
http://poj.org/problem?id2681 给你任意长度的字符串,找出两串字符中不相同的字符个数(总数) #include<string> #include<cstring> #include<iostream> #include<cstdio> using namespace std; int main() {int n;…

数据通信技术(三:VLAN划分)
VLAN划分 1.配置环境 :创建4台PC机,并为PC机配置IP PC0:192.168.1.1/24 PC1:192.168.1.2/24 PC2:192.168.1.3/24 PC3:192.168.1.4/24 2.修改交换机名称: 创建VLAN1和VLAN2:…

CSS(2 )-- CSS样式大全
常用css样式大全Author:xu_shuyi201504039.CSS颜色代码大全http://www.cnblogs.com/axing/archive/2011/04/09/CSS.html1.CSS文字属性color : #999999; /*文字颜色*/font-family : 宋体,sans-serif; /*文字字体*/font-size : 9pt; /*文字大小*/font-style:itelic; /…

java io读书笔记(6) Writing Arrays of Bytes
显而易见,一次性写出一堆数据,要比一个byte一个byte的写,快多了,因此,outputstream,给出了2个增强型的write: public void write(byte[] data) throws IOException public void write(byte[] da…
iOS 自定义双向滑块Slider
ZPSlider 一个双向滑块的Slider 前提 这个是在一次和朋友吃饭的时候,我们唠嗑的时候他说的一个需求。因为系统的Slider是只有一个滑块的,而且没有分段滑动的效果。 这不最近都在研究这么个需求。 How to use it -(instancetype)initWithFrame:(CGRec…

数据通信技术(四:链路聚合)
1、修改交换机名称 2、配置A交换机数据 3、配置B交换机数据 4、创建VLAN 5、互拼验证 6、去掉一条链路再进行验证 数据通信技术(一:IP划分) https://blog.csdn.net/qq_37823605/article/details/90345408 数据通信技术(二…

iOS图片,视频上传视频内容旋转
#前言 我最近在接手一个智能盒子的iOS应用,上面有一个功能是这样的。把你本地的照片和视频可以甩屏到你绑定的盒子上。 我的上一位前辈做的时候必须要求再同一个局域网,但是当我做的时候要求不同的局域网也要实现这样的一个功能,优化用户的使…

jackson 解析json问题
1、json串中有key为A,但指定转换的mybean中未定义属性A,会抛异常。处理:mapper.configure(Feature.FAIL_ON_UNKNOWN_PROPERTIES, false),加上这一条,就没问题了,正常转换。 2、 默认的json串,如…

【转】UIColor对颜色的自定义
原文网址:http://blog.sina.com.cn/s/blog_5f19ccb10101bhqh.html 在iOS开发中,我们使用UIColor来对我们的界面进行颜色设置,一般我们通过以下两种方法使用UIColor:1,label.textColor [UIColor blueColor];2,label.textColor [U…

数据通信技术(八:OSPF单区域配置实验)
OSPF单区域配置实验(Cisco) 一.知识准备 1.掌握了OSPF动态路由协议的定义和功能; 2.掌握了OSPF动态路由协议的特征和工作原理。 二.实验目的 掌握OSPF动态路由单区域的基本配置方法和结果验证。 掌握OSPF单区域配置的作用 三ÿ…

redis在php中的使用介绍
redis介绍 redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hashs(哈希类型)。这些数据类型都 支持push/pop、add/remo…

控制发光二极管
一 LED驱动的实现原理 尽管Linux驱动直接与硬件打交道,但并不是Linux驱动直接向硬件中的内存写数据,而是与本机的I/O内存进行交互。每一个连接Linux的硬件在I/O内存中都会有映射首地址,开发板上的LED也有其映射首地址。 二 编写LED驱动 第一…

iOS 跑马灯之 TXScrollLabelView
前言 前段时间在开发一个广播的功能,网上也自己找了一些库,没有发现非常好用的,于是自己抽时间写了一个,在 Github 上发布一天收获六十多个 star,这里首先感谢大家在微博上的转发,使得 TXScrollLabelView 被…

数据通信技术(六:静态路由实验)
数据通信静态路由实验 1、R1路由的端口配置 2、R2路由的端口配置 3、R3路由器端口配置 4、互通性验证 5、拓扑结构 数据通信技术(一:IP划分) https://blog.csdn.net/qq_37823605/article/details/90345408 数据通信技术(二&#…

172. Factorial Trailing Zeroes
/**172. Factorial Trailing Zeroes *2016-6-4 by Mingyang* 首先别忘了什么是factorial,就是阶乘。那么很容易想到需要统计* (2,5)对的个数,因为2510。但是这个条件放松一下就会发现其实只要数5的个数就好了,* 因为2实在是比5要多的多。那么…
MarkdownView:Markdown 文档预览视图组件
原文链接:https://github.com/keitaoouchi/MarkdownViewMarkdownView:Markdown 文档预览视图组件。# 为开源点赞# —— 由SwiftLanguage分享MarkdownView is a WKWebView based UI element, and internally use bootstrap, highlight.js, markdown-it. H…

项目管理过程中,如何编制初步工作说明书
最近在做一个项目的时候,客户特别苛刻,在制定工作说明书的时候,费了很多周折,把很多以前做项目的时候都不怎么会专门考虑的细枝末节和例外情况都进行了详细说明和约定,但是在项目实施过程中,却发现这样的说…

数据通信技术(七:RIP路由水平分割配置)
RIP路由水平分割配置实验报告 一、知识准备 掌握RIP动态路由的定义和特征。掌握RIP路由环路的危害和解决技术。掌握水平分割的工作原理。二、实验目的 掌握路由器中RIP动态路由水平分割功能的配置方法和结果验证,并通过实验结果更好的理解水平分割的作用和原理。…

android蓝牙4.0(BLE)开发之ibeacon初步
一个april beacon里携带的信息如下 ?1<code class" hljs ">0201061AFF4C0002159069BDB88C11416BAC3F33468C2788A3044B0378C60C09417072696C426561636F6E051250002003020A0000000000000000000000</code>具体是什么意思呢 ?1234567891011121314151617181…
APP程序内部打开某个APP的AppStore页面
作者 呀咪9527 关注 2017.03.21 16:44* 字数 222 阅读 154评论 0喜欢 9最近在做内购用到了StoreKit.framework库,偶然间发现中SKStoreProductViewController这个类,查看文档后发现一个妙用,解决了我一个痛点:APP每次更新或者跳转至…

sql server 2014预览版发布
MSDN发布sql server2014预览版,如下图: SQL Server 2014新特性: 微软SQL Server部门主管Eron Kelly介绍,通过将交易处理放到内存中进行,新的SQL Server 2014在测试中能够将性能提升50倍以上。在新版本中,DB…

数据通信技术(九:OSPF特殊区域配置(Cisco))
OSPF单区域配置实验(Cisco) 一.知识准备 1、掌握了OSPF动态路由协议的定义和功能; 2、掌握了OSPF动态路由协议的特征和工作原理。 二.实验目的 1、掌握路由器中OSPF特殊区域STUB配置方法和功能验证; 2、掌握OSPF特殊区域STUB…

iOS 屏幕亮度和闪光灯控制
所用涉及框架:AVFoundation框架和ImageIO 读取屏幕亮度:[UIScreen mainScreen].brightness; 设置屏幕亮度:[[UIScreen mainScreen] setBrightness:0.5]; 获取环境亮度主要代码: - (void)getTorch {AVCaptureDevice *device [AV…

一个几何不等式的最佳常数
今天上午动用win7旗舰版64位SP1(英特尔第二代酷睿I7-2630QM 2.00GHz 4核 内存 8G)下基于maple 16平台的BOTTEMA2009费时2899.02s,消耗内存633.56M,得到使不等式 $m_{a}w_{a}m_{b}w_{b}m_{c}w_{c}\leq k\cdot s^2$ 成立的最佳常数 $k$ 为如下一 $7$ 次方程 $729k^7-7599k^6-276…

数据通信技术(十:OSPF特殊区域TOTALLY STUB配置(ZTE))
OSPF特殊区域TOTALLY STUB配置(ZTE) 一.知识准备 1、掌握了OSPF动态路由协议的定义和功能; 2、掌握了OSPF动态路由协议的特征和工作原理。 二.实验目的 1、掌握路由器中OSPF特殊区域TOTAL STUB配置方法和功能验证; 2、掌握OS…

apue第四章习题的一些拙见(不定时更新)
写在前面:最近要期末考试,看来真的是要不定时更新啦XD apue4.1: 由于在这里lstat是不跟随符号文件的,而stat是跟随符号文件的,这样一来,如果使用stat,而不使用lstat那么就无法观察到符号文件。在书上4.3姐中有提到。 a…

容器使用之vector
出处:http://blog.csdn.net/edify/article/details/4035243 C内置的数组支持容器的机制,但是它不支持容器抽象的语义。要解决此问题我们自己实现这样的类。在标准C中,用容器向量(vector)实现。容器向量也是一个类模板。…
Hyperloop 让发布简洁高效
原文链接:https://mp.weixin.qq.com/s/MZMqzaKLqQN0zJikNYEbwgHyperloop 是服务于美团点评客户端的组件发版、持续集成、App 打包构建、资源调度等各个环节的发布调度系统。名称起源于美国 Elon Musk 构想的 Hyperloop 超级高铁,象征着现代、简洁、高效。…

数据通信技术(十一:无中继的DHCP配置(ZTE))
路由器的无中继DHCP配置(ZTE) 一.知识准备 1、掌握DHCP的基本原理和作用; 2、掌握DHCP的网络架构。 二.实验目的 1、掌握中兴路由器DHCP的配置方法和功能验证; 三.实验内容 1、完成中兴路由器DHCP的基本配置和结…