`
yidongkaifa
  • 浏览: 4038421 次
文章分类
社区版块
存档分类
最新评论

IOS学习基础知识

 
阅读更多

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也是这样做的。

分享到:
评论

相关推荐

    学习IOS基础教程电子书(1)

    IOS基础教程电子书上,适合IOS学习初学者系统掌握基础知识。

    IOS开发-Swift-基础知识学习笔记

    IOS开发-Swift-基础知识学习笔记

    学习IOS基础教程电子书配套实例

    IOS基础教程电子书配套实例,适合初学者系统掌握IOS开发中常见知识。

    学习IOS基础教程电子书(2)

    IOS基础教程电子书下,适合初学者系统掌握IOS开发基础知识。

    Ios学习代码:OC课程代码

    本人学习OC过程中,课程敲的代码.基本包含了ios中有关OC方面的基础知识.

    一步一步学习IOS6

    第十五部分:Objective-C基础知识-介绍面向对象的编程 第十六部分:如何在你的iPhone App中发送邮件 第十七部分:持续改善Recipe App的详细视图控制器 第十八部分:在iOS 5中使用JSON编程 第十九部分:在.NET ...

    IOS操作系统基础知识.zip

    操作系统:LInux、IOS、树莓派、安卓开发、微机操作系统、网络操作系统、分布式操作系统等。此外,还有嵌入式操作系统、智能操作系统等。 网络与通信:数据传输、信号处理、网络协议、网络与通信硬件、网络安全网络...

    IOS从基础到高级教程

    以swift为主干,1个app实战项目为线索,从单元格定制化,导航控制转场,堆叠视图,等基础知识到详情页增强,导航条美化,基础动画,可视化特效等细节知识点入手,由浅入深到最后的高级教程,仅供大家学习!

    ios及ui基础

    ios基础知识包括oc语法,ui和网络,系统学习的好材料,值得你拥有。

    ios的屏幕小组件学习文档

    iOS 的屏幕小组件 Widget 自 iOS...请注意,开发小组件必须使用 SwiftUI,如果你还没接触过 SwiftUI,可以先去苹果的官方教程学习一些基础知识。如果你一直在观望是不是需要开始学习 SwiftUI,那么这就是一个很好的机会

    一步一步学习_iOS_6_编程(第四版)

    第十五部分:Objective-C基础知识-介绍面向对象的编程 第十六部分:如何在你的iPhone App中发送邮件 第十七部分:持续改善Recipe App的详细视图控制器 第十八部分:在iOS 5中使用JSON编程 第十九部分:在.NET ...

    ios 基础语法

    比较详细的语法,包含各种基础知识,很适合新手学习。比较全面准确。

    IOS中sqlite3的使用

    关于IOS系统中splite的基础知识知识,可以学习一下

    高级iOS面试题底层基础2020年.zip

    探讨iOS 中图片的解压缩到渲染全过程..pdf 数据结构与算法.pdf 数据安全及加密.pdf 设计模式面试题.pdf 内存管理面试题.pdf 面试题--CALayer 与 UIView 的关系.pdf 流媒体知识核心概念 多线程面试题.pdf

    oc基础知识

    这是学习ios开发前必须了解的objectc基础知识,其中还有些例子能帮助快速得更好的了解并运用oc

    《iOS传感器应用开发最佳实践》源码

    本书是我们智捷iOS课堂团队编写iOS系列丛书中的一本,目的是使一个有iOS开发基础的程序员通过本书的学习,能够开发iOS 硬件访问和传感器应用的程序。另外,对于没有iOS开发基础读者,我们推荐先阅读我们已经出版的...

    基础篇必看,史上最全的iOS开发教程集锦,没有之一.zip

    总之,通过学习本文,读者可以全面了解iOS开发,掌握小程序开发技巧,为成为一名出色的iOS开发者奠定基础。现在,就让我们开始iOS开发的学习之旅吧!相信在这个过程中,你会收获很多宝贵的经验和知识。祝你学习顺利...

    ios开发介绍&心得&项目&相关练习

    通过简洁明了的阐述,读者可以快速掌握iOS开发的基础知识,为后续的学习和实践打下基础。 接着,文章分享了iOS开发的心得体会。作者结合自己的实际经验,谈到了学习编程语言和框架的重要性,以及团队协作和持续学习...

    使用ARM汇编破解iOS程序基础知识分享

    最近对iOS逆向工程很感兴趣。但查到的资料中都涉及到有ARM汇编,但都只是很泛地用到,并...因此,经过一系列的学习对iOS下的ARM有了一定的理解。在此打算用几篇文字记录下来, 限于本人水平有限,如有错误请不吝赐教。

Global site tag (gtag.js) - Google Analytics