`
woainike
  • 浏览: 77693 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
最近访客 更多访客>>
社区版块
存档分类
最新评论

ios5新特性,不断更新

 
阅读更多

明显的属性参数的改变

retain ---strong

assing ---unsafe_unretaind

 

这里面说明下,assing,

assign指的就是派遣,分配.

 

 

为什么id<sthDelegate> delegate 用的是assign?

 

elegate 实际上指向的是某个类的实例
我的理解是assign 一般用在 int ,float 这些不需要释放的资源上。
为什么 id delegate 也用 assign

 

 

这个要根据语境来判断吧。一般来说property的setter不应该是assign的,除非是poco的对象。
POCO=plain old c object.就是指原始类型、结构体、枚举、联合体等c支持的类型。反正就是又平又老,乏味的玩意了。

 

 

有人又要问了nonatomic是什么,原子性,这个是在数据库设计里面的一个概念,原子不能在分。

 

assing是为了防止交叉引用..比如..有3个类....A..B..C..
我在A里面..创建B...B里面有创建C....并设定C的delegate=self(也就是B)..
如果C里面的delegate是retain...那么B的retain就会是+2(A类创建时+1)
这时候..如果我在A里面release了B...那么B的retain就不会是0(因为C的delegate是retain的)...
也就是说B永远不会被释放掉..就会释放不了..

其实在ios5里面,unsafe_unretaind就描述了,很清楚了,

如果清楚多线程里面的,对象同一时间进行访问,和修改,提交的时候,表现出了问题。

 

 

 

 

举个例子,来说明下assing和retain。

 

设你用malloc分配了一块内存,并且把它的地址赋值给了指针a,后来你希望指针b也共享这块内存,于是你又把a赋值给(assign)了b。此时a和b指向同一块内存,请问当a不再需要这块内存,能否直接释放它?答案是否定的,因为a并不知道b是否还在使用这块内存,如果a释放了,那么b在使用这块内存的时候会引起程序crash掉。

 

了解到assign的问题,那么如何解决?最简单的一个方法就是使用引用计数(reference counting),还是上面的那个例子,我们给那块内存设一个引用计数,当内存被分配并且赋值给a时,引用计数是1。当把a赋值给b时引用计数增加到2。这时如果a不再使用这块内存,它只需要把引用计数减1,表明自己不再拥有这块内存。b不再使用这块内存时也把引用计数减1。当引用计数变为0的时候,代表该内存不再被任何指针所引用,系统可以把它直接释放掉。 

 

 

 

而copy是在你不希望a和b共享一块内存时会使用到。a和b各自有自己的内存。

 

 

凌乱的总结描述

  1. * assign: 简单赋值,不更改索引计数(Reference Counting)。  
  2. * copy: 建立一个索引计数为1的对象,然后释放旧对象  
  3. * retain:释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1 
  1. * 使用assign: 对基础数据类型 (NSInteger)和C数据类型(intfloatdoublechar,等)  
  2. * 使用copy: 对NSString  
  3. * 使用retain: 对其他NSObject和其子类  

copy是创建一个新对象,retain是创建一个指针,引用对象计数加1

1.readonly表示这个属性是只读的,就是只生成getter方法,不会生成setter方法.

2.readwrite,设置可供访问级别

3.retain,是说明该属性在赋值的时候,先release之前的值,然后再赋新值给属性,引用再加1。

4.nonatomic,非原子性访问,不加同步,多线程并发访问会提高性能。先释放原先变量,再将新变量retaii然后赋值;

      注意,如果不加此属性,则默认是两个访问方法都为原子型事务访问。

分享到:
评论

相关推荐

    ios-support-matrix-app-data-model:一组不断发展的 JSON 文件,描述了 iOS 设备的所有特性和功能

    一组不断发展的 JSON 文件,描述了 iOS 设备的所有特性和功能。 ##1。 介绍 该存储库是一项协作工作,旨在编纂 iOS 设备的所有特性,以便信息系统和应用程序轻松使用它们。 ##2。 存储库布局 / /README.md ...

    iOSDevelopmentTutorial:iOS编程的教程和参考指南

    本文内容会持续不断地更新并维护,如果您有推荐的资源,请到此处。 移动开发姊妹篇,请到这里。 移动开发姊妹篇,请到这里。 iOS官方相关技术站点 站点名称 站点地址 站点介绍 这其中包括人机交互指南,自适应的用户...

    ios开发相关知识点详细介绍

    随着智能手机市场的不断扩大和移动互联网的快速发展,iOS开发成为越来越多开发者的职业选择。iOS平台因其优秀的用户体验、丰富的功能特性和广泛的应用场景而备受瞩目。掌握iOS开发技术,不仅能够开发出具有创新性和...

    swift最新中文文档

    swift最新中文文档 不定时更新 Swift 是一种新的编程语言,用于编写 iOS 和 OS...用 Swift 编写 iOS 和 OS X 应用将是一场美妙的体验,Swift 之后也会不断开发新特性和兼容性。我们对 Swift 充满信心,你还在等什么!

    iOS开发之适配iOS10以及Xcode8

    iOS开发:适配iOS10以及Xcode8 现在在苹果的官网上,我们...用Xcode8打开工程后,比较明显的就是下图了,这个是苹果的新特性,可以帮助我们自动管理证书。建议大家勾选这个Automatically manage signing(Ps.但是在b

    zhuishushenqi:追书神器Swift版客户端(非官方)。 不断更新中.....

    不断更新中...... 20170607:本次功能变更:增加书架删除,缓存,修复一些缺陷 20170612: 本次功能变更:增加开屏广告,增加首次安装新特性,推荐书籍等 20170808:本次功能变更:充分利用Swift语言特性,整合API,...

    思科 XR 12000系列路由器

    Cisco IOS XR 软件是一种独特的自治愈和自防御操作系统,它不但支持全天候运营,还能不断扩容和添加新服务或新特性。利用分布式处理智能以及强有力的服务质量(QoS)和组播机制,Cisco XR 12000系列能够帮助电信运营...

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    渐进增强 一开始只构建站点的最少特性,然后不断针对各浏览器追加功能。先让网站能够正常工作于尽可能旧的浏览器上,然后不断为它在新型浏览器上实现更多的增强和改进。 Viewport 移动设备上的Viewport就是设备的...

    iOS持续集成:XcodeServer、Jenkins、Travis和fastlane

    考虑到之前CI方面的体验,以及我们的iOS开发者提出的各种需求,我们对这种服务器的要求是必须能够:构建并签署我们的所有不同特性的应用;将我们的应用商店首选项上传至iTunesConnect;将IPA、dSYM,以及变更日志...

    IMGPickerManager:集成,简单,独立,高效,轻便且不断更新的映像选择了第三方框架

    一个集成简单、高效、轻量级、持续更新的第三方图片选择框架 特性 支持选择图片(普通图片,GIF格式图片等) 支持选择LivePhoto 支持选择Video 支持3D Touch预览 集成简单高效 更多特性 有更多需求或发现bug的...

    Delphi语言教程.docx

    Delphi是一款著名的快速应用程序开发工具(RAD),最初由Borland公司在...随着技术的不断发展,Delphi也在不断更新和升级,以适应新的开发需求和市场需求。目前,Delphi已经支持开发针对Windows、Mac、Android和iOS的原

    chrome.exe

    更新检查可确保会使用最新版的安全性功能与修正程序,浏览器自动更新新的版本,不需要用户采取任何动作,更新后会在下一次启动中自动使用。 专业测评 HTML5测试 HTML5测试(3张) CSS3测评 Acid1及Acid2均顺利...

    Swift 5 简体中文、繁体中文 与英文原版

    # 关于 Swift Swift 是一种非常好的编写软件的方式,无论是手机,台式机,服务器...Swift 已经进行了多年,并且随着新特性和功能的不断发展。我们对 Swift 的目标是雄心勃勃的。我们迫不及待想看到你用它创建出的东西。

    MLSwiftBasic:可以在基本文件中使用swift新项目

    会不断提供Swift分类Demo or Gif新特性懒人Swift基本框架,正提供各种简单,方便的接口 目前支持的功能:1&gt; 自定义导航栏、监听事件2&gt; 滚动效果3&gt; 正在筹备一些分类,期待您的PullRequest准备迭代:4&gt; 正在准备滑动...

    Kivy API参考.zip_Kivy API_android_kivy_多点触控_触控输入

    它是跨平台(linux/osx/windows/android/IOS),并按照麻省理工学院许可证. 它提供了对许多点触摸输入设备的本地支持,一个不断增长的多触控小部件库和硬件加速OpenGL绘图。Kivy旨在让您尽可能快速、轻松地构建自定义...

    Kingsoft WPS Office Pro 2016 v10.8.0.5391 专业增强版.zip

    WPS 2013的发布首次实现各平台版本同步更新,同时,在WPS 2013中启用了全新的底层原生跨平台V9引擎,新引擎能实现在Linux、iOS、Mac等多平台的代码复用,让各个平台保持同步更新。 WPS Office (10.8.0.5391) 新增...

    light-push:轻量级推进服务和实时在线监控平台,同时用于开发即时通信系统,基于节点的socket.io,支持网络,android,ios客户端,支持移动端离线推进,可进行分布式部署

    概述轻量级推送服务和实时在线监控平台,同时用于开发即时通信系统,基于node的socket.io,支持web,android,ios客户端,支持移动端离线推送,可进行分布式部署前言随着互联网网速的不断提升,即时消息通信的应用...

    产品经理必须了解:三大移动平台上的交互设计差异

    在设计的过程中,因为这三个平台的不同特性,往往要角色切换,不断的换位思维。可能新手和外行人觉得iOS和Android没什么区别,有的甚至拿Android直接照抄iOS设计就可以了。还有一些人可能对WindowsPhone平台一直觉得...

    20000+条公开网络岗位招聘信息

    熟悉安卓和IOS系统框架和特性等; 2、熟悉Python等脚本语言使用经验,熟悉常见的web(selenium)、app(appium)自动化开发框架; 3、熟悉持续集成工具如jenkins; 4、熟悉接口测试,包括单接口测试和业务流接口测试; 5...

Global site tag (gtag.js) - Google Analytics