当前位置: 首页 > news >正文

网络科技网站设计微信昵称大全

网络科技网站设计,微信昵称大全,新闻热点事件2023最新,专门做旅游的网站有哪些一、retain、copy、assign的区别#xff1a;1.retain#xff1a;当对一个对象A调用retain#xff0c;然后赋值给B时#xff0c;对象的引用计数加1#xff0c;A和B指向同一个内存地址。2.copy#xff1a;当对一个对象A调用retain#xff0c;然后赋值给B时#xff0c;对象…一、retain、copy、assign的区别1.retain当对一个对象A调用retain然后赋值给B时对象的引用计数加1A和B指向同一个内存地址。2.copy当对一个对象A调用retain然后赋值给B时对象的引用计数加1而且生成了一个新的拷贝A和B指向不一样的内存地址。3.assign当对一个对象A调用retain然后赋值给B时对象的引用计数不变A和B指向同一个地址。二、为什么delegate声明要使用assign因为如果使用assign的话对象间会产生循环引用的情况导致循环引用的对象都不能释放内存。三、atomic和noatomic的区别这两个关键字用来决定编译生成的getter和setter方法是否为原子操作即是否是多线程安全的。atomic表示是原子操作支持多线程安全noatomic是非原子操作不支持多线程安全。四、自动释放池1.自动释放池实现了对象的延迟释放将释放时机延后。当对一个对象调用autorelease方法后对象被加入自动释放池。当自动释放池释放时会对自动释放池中的对象调用release方法。2.主线程会自动创建自动释放池自己创建的线程需要自己负责创建自动释放池。在一个RunLoop周期开始时系统会创建一个自动释放池当RunLoop周期结束时系统会释放之前创建的自动释放池。如果我们在使用autorelease时没有自己创建自动释放池对象会在它所在的RunLoop周期结束时被释放掉。一个UI事件Timer调用delegate调用都会是一个新的Runloop。3.类似于[NSString stringWithFormat:]这样的类方法创建的对象默认是使用了自动释放池的不需要释放。4.当在短时间内大量的使用自动释放对象要手动使用自动释放池来释放对象否则内存会在短时间内疯涨。六、didReceiveMemoryWarning、viewDidUnload和dealloc方法使用1.didReceiveMemoryWarning方法首先调用[super didReceiveMemoryWarning]方法然后检查当前视图的父视图是否为空如果为空则释放掉一些不需要的数据。关于视图界面的释放不应该在这个方法中应该放在viewDidUnload方法中。2.viewDidUnload方法:(1)此方法只在发生内存警告时调用。在这个方法调用之前控制器的view属性已经被release并且设置为nil。(2)iOS6之前:当低内存情况发生而且当前视图不需要显示时系统会调用此方法来清理额外的视图(但是控制器还存在)。在此方法中我们需要清理输出口比如清理输出口self.xxxx nil;(使用self关键字)以及我们自己通过代码建立的视图界面。我们不应该在此方法中清除数据尤其是一些不能恢复的数据。可以恢复的数据我们应该在didReceiveMemoryWarning中清除不能恢复的数据应该在dealloc方法中清除。(3)iOS6以及之后:当控制器的视图已经没有显示在window上时系统会自动清空控制器中的所有视图以及输出口所以不用在发生内存警告时再调用此方法。所以在iOS6以及以后的版本这个方法不会再被调用了。3.dealloc方法对象释放时调用在这个方法中要释放掉所有的数据和输出口。比如释放输出口[xxx release];(不使用self关键字)六、一些注意的地方1.向集合(NSArray,NSDictionary等)添加对象时被添加的对象会被执行retain操作当从集合中移走对象或者集合对象被释放时集合中的对象会被执行release操作。2.要保证有多少个alloc、copy、multablecopy、retain消息就要有多少个release或者autorelease保证代码平衡。3.在程序中直接用创建的NSString对象是常量引用计数是-1向它发送retain、release没有效果。4.在View中使用图片时大的图片区域尽量使用小的图片数据来填充减小内存占用。5.[UIImage imageNamed:]次方法使用了系统缓存来缓存图像会长时间占用内存最好使用imageWithContentsOfFile方法。6.数据要延迟加载只在内存中保留满足需要的最少的数据和视图元素需要的时候再加载不需要就马上销毁。7.假如一个成员变量在property中使用了retain当使用self关键字对其赋值时会对创建的对象再retain一次造成内存泄露。比如self.xxx [[XXX alloc] init];  对一个成员变量赋nil值时self.xxx nil,会调用xxx的release方法并且将指针置空xxx nil只是将指针置空。8.加载本地图片时尽量不要使用[UIImage imageNamed:]这个方法因为这个方法会使用系统缓存来缓存图像会占用内存。可以使用[UIImage imageWithContentOfFile:]来加载本地图像。9.在控制器中使用NSTimer会使当前控制器引用计数加1所以在控制器释放之前必须暂停和使定时器失效否则控制器将不会被释放。七、内存警告(iOS6之前)1.原理当发生内存警告时系统会对程序内存在的所有的ViewController调用didReceiveMemoryWarning方法然后如果当前ViewController没有父视图(即没有显示)viewDidUnload方法会被调用(iOS6及以后不调用)。之后当ViewController的视图对象比如view被再次访问时viewDidLoad方法会被调用一般视图初始化和数据创建都在viewDidLoad方法里面做所以界面和数据会恢复。2.处理方法(1)使用数据缓存机制为每个ViewController创建一个数据缓存池比如使用NSMultableDictionary类型我们把所有可以重建的数据、动态创建的视图元素引用都保存在这个缓存池中而且每组数据都用一个Key对应。如果缓存池中已经存在这组数据了则直接取出来用如果不存在则创建再使用。(2)当发生内存警告时如果当前视图在显示则只清空数据不清空视图元素引用如果不在显示则把数据和视图元素引用都清空。(3)发生内存警告后当控制器的视图重新回到window显示时,viewDidLoad方法会被调用界面和数据会恢复。(4)当控制器销毁时在delloc方法中将数据缓存中的数据全部清空。(5)当需要重置缓存中的数据时按照Key从缓存池中删除对应的数据然后再按照第(1)条的规则取数据。3.遇到的问题苹果推荐的didReceiveMemoryWarning的实现方式是这样-----------------------------------------------------------(void)didReceiveMemoryWarning{    if (self.view.superview nil) {            //在此处清空一些不需要的数据        }    [super didReceiveMemoryWarning];}----------------------------------------------------------假如此时这个视图控制发生了内存警告数据和视图元素被释放了然后在这个视图恢复显示之前又发生了内存警告就再次调用了此方法因为在这个方法中访问了view属性所以viewDidLoad方法会调用视图和数据被重建创建完之后视图和数据又马上被清空。这个过程时多余的。4.解决办法在控制器中设立一个变量用来标志是否需要对内存警告做出响应比如isNeedCheckMemoryWarning在viewDidLoad方法中将其设置为YES在didReceiveMemoryWarning方法中检查这个值代码如下-----------------------------------------------------------(void)didReceiveMemoryWarning{    if (isNeedCheckMemoryWarning YES self.view.superview nil) {        //在此处清空一些不需要的数据    }    isNeedCheckMemoryWarning NO;    [super didReceiveMemoryWarning];}八、内存警告(iOS6之后)1.不同之处(1)iOS6之后viewDidUnload不再调用当控制器的视图已经没有显示在window上时系统会自动清空控制器中的所有视图以及输出口。(2)因为视图的释放由系统控制了所以当发生内存警告之后view被再次访问viewDidLoad不再调用。(3)综合以上两点所有关于界面的回收和恢复我们都可以不用管包含动态创建的视图(可以恢复)。我们只需要关注数据。2.处理方法与第七点的不同1同样使用数据缓存池但是数据缓存池中只存储视图之外的数据。2数据缓存池的创建放到initXXX方法中只创建一次。3第三点遇到的问题不存在了可以不用加isNeedCheckMemoryWarning变量。
http://www.yutouwan.com/news/177810/

相关文章:

  • 介绍一个地方旅游网站怎么做广州外贸公司网站建设
  • 做同城网站赚钱吗html怎么做商品页面
  • 网站开发协同海南省建设执业中心网站
  • wordpress建教学网站网站建设系统
  • ajax 网站模板上海市建设质量协会网站
  • 成都企业建网站wordpress获取分类下所有文章
  • 只用网站开发VS就安装那些就够了网站建设全视频教程下载
  • 国外做农产品有名的网站好的h5制作网站模板
  • 上海网站设计合理柚v米科技营销运营管理
  • 网站开发需求分析范本网站建设带后台
  • 郑州网站推广¥做下拉去118cr微网站 获取手机号
  • 营销网站建设规划wordpress下载主题后怎么用
  • 做网站注册验证码wordpress mysql安装
  • 建筑类电商网站网络营销一个月能挣多少钱
  • 做婚纱摄影网站价格wordpress 文章翻页
  • 德阳建设局网站wordpress虚拟币接口
  • 做健身推广网站站酷设计网站官
  • 第一百四十七章 做视频网站笑话网站开发
  • 家庭宽带怎么做网站小微企业注册流程及费用
  • 网站开发用到的技术注册深圳公司代理记账报税
  • 做影片的网站描述程序界面设计
  • 营销型网站可以吗网站建设费用推荐网络专业
  • 宣城网站开发专业制重庆房地产新闻
  • 网站开发 技术问题南沙滩做网站公司
  • 网页网站开发公司怎样加入装修接单网站
  • 专业网站建设公司哪个公司好聊天软件哪个最火
  • 网站建设创业经历百度搜索网站
  • 河北省建设厅网站老版大连seo排名优化
  • php做网站导购模板哪些网站有友情链接
  • 网站全屏宽度是多少合适性价比最高网站建设