一、非ARC内存管理问题。

  有些同学在创建项目的时候忘记点ARC了,导致一些成员属性都莫名其妙的释放了。然后出现了一系列莫名其妙的错误。

在滚动UITableView的时候出现野指针错误。

  

  一出现这些野指针错误,首先应该想到某些对象被释放了,然后发现代码中,并没有什么造成对象被释放的情况,这时候应该马上想到很可能是非ARC弄的。下图为怎么查看项目是否是非ARC。

  

  在非ARC中没有强引用的概念,因此下图的成员变量是没有被强引用的。

  

  在看看下图,allPro数组没有通过alloc调用,没有调用alloc产生的对象都是自动释放的

 allPro=@[
@{
kCities:@[@"浦东",@"杨浦",@"闸北",@"闵行"],
kHeader:@"上海",
kFooter:@"上海不错"
},
@{
kCities:@[@"海淀",@"昌平",@"天安门"],
kHeader:@"北京",
kFooter:@"北京很好"
} ];

  所以在滚动的时候会出现野指针错误,因此需要将项目改成ARC。如下图

  

  

  两个勾都得选中,然后一直点确认就OK了。

二、数据模型属性采用的策略中除了基本类型需要用assign,字符串需要用copy,其他对象类型都需要用strong。而控制器中视图采用的策略需要根据情况而定。

  下图就是数据模型中属性用错了策略导致,UITableViewcell重新出现到界面时,会导致数据丢失。

  

三、想在点击cell时做些操作,方法选错了。

  下面两个方法太相似了,很容易选错。

 // 当点击一行cell时,会调用这个方法
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
// 当取消选择一行cell时,会调用这个方法
-(void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath

四、字符串小调试技巧

  当把一个字符串转换成基本数据类型时,字符串打印有值,但是转换成基本数据类型为0时,这个莫名其妙的问题,首先应该想到字符串中很可能有换行符合等,导致转换不成功。

  

NSString *str = @"                                                                                  123";
NSInteger i = [str integerValue];
NSLog(@"%@",str);
NSLog(@"%d",i);
碰到这种情况,可以在打印字符串的时候在占位符两边各加一个数字.
NSLog(@"1%@1",str);

  然后看打印结果就能知道有字符串中有多少空行了

  

  只要将空行去掉就能转换成功了。字符串去掉空格的方法:

// 此方法是通过什么字符集裁剪字符串。
- (NSString *)stringByTrimmingCharactersInSet:(NSCharacterSet *)set;

  NSCharacterSet对象可以通过类方法创建

// 创建空格和换行字符集
[NSCharacterSet whitespaceAndNewlineCharacterSet];
// 创建空格字符集
[NSCharacterSet whitespaceCharacterSet];

五、下图的警告意思是:初始化时,类型指向不匹配,应该用NSArray * 而不是YZPerson *

  

  找到原因后,然后看person方法是怎么声明。

  

  解决方式:将NSArray * 改成id。

六、UITableView数据源问题

  1.1  

  错误原因:说YZViewController 没有实现 tableView:numberOfRowsInSection:

  解决方式:实现tableView:numberOfRowsInSection:

  1.2

  

  这里返回空,会报错。

  UITableView内部实现原理:

  数据源实现了这个方法

 -(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

 //tableView内部自动会调用以下方法添加cell。
[tableView addSubview:cell]; //如果返回的cell为空,也就意味着生成下面一行代码。
[tableView addSubview:nil];

  而addSubview是将右边参数添加到数组中保存起来,而数组是不能添加空值的。所有集合对象都不能出传空。例如数组,字典,NSSet。

  以上错误总结:作为tableView的数据源必须实现两个方法。

  返回行数

  -(NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section;

  返回每一行显示的内容

  -(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

  另外返回每一行显示的内容不能返回nil。

七、在数组删除一个模型,并不代表把这个模型给释放了。

  

  上面步骤二,仅仅是将模型从数组中销毁,而模型并没有被销。

八、stroyboard中显示的跟根视图是UIView,而stroyboard的控制器是UITableViewController就会报这个错误

  

  原因是:UITableViewController控制器不能加载UITableView,因为它会去加载stroyboard中的UIView。

  解决方式:将stroyboard中的UIView改成UITableView

九、自定义视图的属性命名冲突问题

  

  当发现自己描述的xib和运行的时候展现出来的不一样的时候,这时候已经想到自己命名的属性名称和系统命名的冲突了。

  错误原因:

  

  系统自带的UITableViewCell中也有imageView这个属性,因此冲突了。

  解决办法:将自定义视图的imageView属性名称改成iconView.

  注意:以后自定义属性命名不要和系统自带的属性名称相同。

十、链接错误

  

  以后看到duplicate这个词语,错误原因就是重复定义了类,函数方法等等。

  一般都是因为导入了.m文件

  错误:

  解决方式:将#import "newsCell.m"这一行删掉。

iOS常见问题(4)的更多相关文章

  1. [iOS常见问题] 关于使用QQ做第三方登录的问题!

    [iOS常见问题] 关于使用QQ做第三方登录的问题! 注意:QQ本身没有授权功能,所以想要使用QQ做第三方登录必须通过QQ空间来实现! 第一步:集成ShareSDK(步骤同集成分享的一样,如果已经集成 ...

  2. ios常见问题 经验之谈

    1.既然有问题我们该怎样解决 ? 首先大部分人都会去百度搜索来解决问题, 谁都不例外, 可是百度这东西会有很多误解, 甚至误人子弟, 同时解决问题的效率也不是很高, 如果是技术问题可以去: Googl ...

  3. iOS常见问题(5)

    一.注意将之前storyboard中控制器删除之后,拖入一个新的控制器的时候,stroyboard中控制器的class也要重新填入自己想要展示的控制器,告诉stroyboard去加载哪个控制器. 二. ...

  4. iOS常见问题(3)

    一.发现不少人在给成员变量初始化的时候,容易进错一个方法去初始化. //注意这个方法只有在内存发生警告的时候才会调用. - (void)didReceiveMemoryWarning { [super ...

  5. iOS常见问题(2)

    一.模拟器黑屏 解决方法: 二.打代码时,Xcode没提示 解决方法: 0. 点击Preferences 1. 进入Text Editing 2. 勾选 三.有时候可能在勾选 Autolayout的时 ...

  6. iOS常见问题(1)

    一.storyboard连线问题 产生原因:将与storyboard关联的属性删除了,但是storyboard中还保持之前所关联的属性. 解决: 1.点击view controller 2.点击这排最 ...

  7. iOS开发中常见问题集锦

    在iOS开发中,会出现各种各样的问题.今天,就把这些常见的问题以及各位大牛的解决方案汇总下,方便以后查阅: 常见错误: 1. linker command failed with exit code ...

  8. 李洪强iOS之集成极光推送一iOS SDK概述

    李洪强iOS之集成极光推送一iOS SDK概述 JPush iOS 从上图可以看出,JPush iOS Push 包括 2 个部分,APNs 推送(代理),与 JPush 应用内消息. 红色部分是 A ...

  9. (转载)中文Appium API 文档

    该文档是Testerhome官方翻译的源地址:https://github.com/appium/appium/tree/master/docs/cn官方网站上的:http://appium.io/s ...

随机推荐

  1. hdu 3909 数独扩展

    思路:做法与9*9的一样.只不过是变量. #include<set> #include<map> #include<cmath> #include<queue ...

  2. spf13-vim – The Ultimate Distribution for Vim Editor

    spf13-vim is a cross platform and highly customizable assortment of vim plugins and various resource ...

  3. Every student in every school should have the opportunity to learn to code

    “I think everybody in this country should learn how to program a computerbecause it teaches you how ...

  4. swift创建对象use of undeclared type 自己的类

    在swift项目中,引用自己创建的类,编译会成功的,但是会出现红色感叹号,类似报错,如:swift创建对象use of  undeclared type 自己的类,或者 use of unresolv ...

  5. SQL Server 安装程序失败 不能在控件上调用 Invoke 或 BeginInvoke

    出现这种问题的原因是权限问题,怎么处理呢,使用管理员运行 如果这种方法不行,比如我的就不可以,点击右键 对各个权限对象重新添加完全控制权限. 我的电脑的情况是安装sql2010,然后安装sql管理工具 ...

  6. js 设置 获取css样式

    先看一段代码,为了体现一会下面说的js用style获取css样式的不同 一:给div设置margin-left(用style设置css样式没什么问题) box.style.marginLeft=&qu ...

  7. unity基本操作二

    一:error1,先断网再启动点击Manual Activation点击Save License生成相应的alf文件2,联网打开https://license.unity3d.com/manual上传 ...

  8. 不用Unity库,自己实现.NET轻量级依赖注入

    在面向对象的设计中,依赖注入(IoC)作为一种重要的设计模式,主要用于削减计算机程序的耦合问题,相对于Java中的Spring框架来说,微软企业库中的Unity框架是目前.NET平台中运用比较广泛的依 ...

  9. 一致性哈希(consistent hashing)算法

    文章同步发表在博主的网站朗度云,传输门:http://www.wolfbe.com/detail/201608/341.html 1.背景        我们都知道memcached服务器是不提供分布 ...

  10. 《LDAP服务器和客户端的加密认证》RHEL6——第二篇 运维工程师必考

    服务端的配置: (基于原先配好的ldap服务器)打开加密认证: Iptables –F  setenforce 0 1.编辑ldap的配置文件:slapd.conf 2.启动ldap服务器: 3.切换 ...