IOS开发的基础知识建议收藏

1.为什么对一个变量release后还要设为nil对一个变量release后,这个变量指向的内存释放了,但这个变量本身没变,仍指向原来的内存地址。若这个变量在释放后被访问,或者被重复release,

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

全栈程序员社区此处内容已经被作者隐藏,请输入验证码查看内容
验证码:
请关注本站微信公众号,回复“验证码”,获取验证码。在微信里搜索“全栈程序员社区”或者“www_javaforall_cn”或者微信扫描右侧二维码都可以关注本站微信公众号。

1.为什么对一个变量release后还要设为nil

  对一个变量release后,这个变量指向的内存释放了,但这个变量本身没变,仍指向原来的内存地址。若这个变量在释放后被访问,或者被重复release,就会导致应用崩溃。设为nil后这个变量指向0×00,可以保证程序以后访问不到原先的内存地址,对nil进行release也没任何问题。

2.
使用类成员时,前面加不加self.有什么区别

  不加self.调用的是成员本身,加self.后实际上调用了其成员的get set方法。

  例:

  //.h

  @property (nonatomic, retain) NSString *name

  //.m

  name = @”bang” //没有retain,随时会被释放

  NSString *str = self.name //等于NSString *str = [self name];

  self.name = @”bang” //等于[self setName:@”bang”]; 这时在set方法里retain了这个字符串

3.内存泄漏

  可以通过xcode的编译工具Product-Analyze检查函数块范围内可能的泄漏点(外带会提示一些可能有的错误)。

  用leaks工具监测出来的泄漏查找方法是跟踪其代码提示中出现的变量,经常这个变量是在提示的调用堆栈以外的地方泄漏的。若实在查不到,最终办法是重写这个变量的retain和release方法,debug,从调用堆栈看是谁retain了它而没有release。

  要注意的是,用CFXXCreate(例如CFArrayCreate)生成的变量要用CFRelease释放。

4.数据存储

  如无搜索需要,可以将一个数据对象直接序列化后存到sqlite,取出时直接反序列化为对象使用。序列化需要数据类实现NSCoding协议,实现encodeWithCoder和initWithCoder两个方法就行,若有多个数据对象,可以写个基类实现这两个方法,并在这里面利用反射枚举自身所有变量去encode和decode,一劳永逸,具体实现网上找找就有了。

5.UINavigationController头尾显示隐藏

  在用NavigationController去管理view的push和pop时,需要根据不同的view设置是否显示NavigationBar和ToolBar,一开始在错误的地方设置了,导致有时该显示NavigationBar和ToolBar时不显示的情况,后来发现在viewWillAppear上设置万无一失。别笑我土鳖,没好好去理解它整个流程,一直没发现。

  - (void) viewWillAppear:(BOOL)animated{

  [super viewWillAppear:animated];

  [self.navigationController setToolbarHidden:NO];

  [self.navigationController setNavigationBarHidden:NO];

  }

6.UITableView游标式渲染

  tableView的机制大概是:先定好总行数,某一行滚入视图范围时,回调一个函数去取view出来显示。这一行滚出视图再滚入时仍会继续回调这一函数取view。有这样的机制就是说无论你table里的数据有多少,都可以全部放入table中不用分页,因为不用一次性把所有数据都取出来,只在需要显示的时候根据游标去取对应的数据就行了。

  可能这是APP组件很自然的方式不用说明,但在web上页面上的数据和元素都是要一次性载入内存的,做久了web,一开始没想到它这样的实现机制,导致我们走了不少弯路。

7.UIWebView渲染范围

  UIWebView不是根据可视范围决定每次的渲染范围,而是根据自身控件的frame大小决定。

  曾尝试webview嵌在tableview里,为了让webview跟tableview一起滚动,把webview的大小设为webview里的内容大小,让webview不出滚动条,从而能跟着tableview的滚动条一起滚。这样做的后果是每次webview都一次性渲染整个页面,内存占用多性能很差,而且在放大缩小这个webview时,渲染放大的整个页面更吃力,出现不能忍受的性能。解决办法是让webview定住高度为一整屏iphone的高度,限制了webview每次的渲染范围为可视范围,性能大好。带来的问题是无法随tableview滚动,但可以以其他方式优化体验。最近看到新版的ZAKER也是这样做的。

 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/120722.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • webstorm2021.10激活码mac[最新免费获取]

    (webstorm2021.10激活码mac)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月28日
    240
  • XOR运算

    XOR运算近来做了一些题目和异或运算有关的题目,总结一下Xor按位异或符号在编程语言中通常是^数学符号通常用⊕表示X=0101BY=1011BXYX⊕B101110000011X^Y=1110B性质1.0^0=02.a^a=03.0^1^2…^n的性质先观察一下如下的序列我…

    2022年7月16日
    20
  • 【伪装位置神器】神行者AnyLocation 1.3.0001可用于微信,陌陌[通俗易懂]

    【伪装位置神器】神行者AnyLocation 1.3.0001可用于微信,陌陌[通俗易懂]<ignore_js_op>软件名称:神行者(破解)软件版本:v1.3.0001授权类别:免费测试机型:大可乐手机下载链接:http://pan.baidu.com/s/1qWwSMde密码:m7mq应用简介:神行者AnyLocation是安卓上最强大的地点变换工具,可以任意设置你的当前…

    2022年6月10日
    41
  • word2010求和符号上下标的打法_求和符号只有下标是什么意思

    word2010求和符号上下标的打法_求和符号只有下标是什么意思想输入的公式:只要在公式旁边继续加文字就会变成这样:解决方法只能在office上实现不能在wps上先输入Alt+=,得到下图在里面进行输入输入\below,空格键按两次在得到的大框里输入\sum空格键按一次在总和符号旁边输入\above空格键两次得到想要的符合。转载于https://jingyan.baidu.com/article/a17d528558c3bbc199c8f25d.html…

    2022年10月7日
    3
  • getParameter和getParameterValues

    getParameter和getParameterValuesgetParameter根据参数名获取参数值但只能获取一个值,例如如果选中多个多选框,获取的值只有第一个。getParameterValues能获取多个值,返回的是一个字符串数组

    2022年7月22日
    10
  • 认识计算机教案_认识计算机硬件教案

    认识计算机教案_认识计算机硬件教案认识计算机教案Tag内容描述:1、第一单元计算机基础知识项目2认识计算机系统【项目目标】了解计算机硬件、软件系统的组成及作用;了解计算机主要部件及其作用;会利用数据存储单位区分存储空间大小;了解计算机主要技术指标及其对性能的影响;理解二进制基本概念及常用数制之间的转换方法;理解ASCII码的基本概念,了解计算机编码规则。任务1认识计算机硬件【任务说明】我们通常看到的微…

    2022年5月3日
    67

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号