一、发现不少人在给成员变量初始化的时候,容易进错一个方法去初始化。

 //注意这个方法只有在内存发生警告的时候才会调用。
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated. } //大部分成员属性的初始化应该在viewDidLoad里面进行。
- (void)viewDidLoad
{
[super viewDidLoad];
}

  最牛解决方法:在一开始就将didReceiveMemoryWarning这个方法删掉。删掉不会影响程序运行。

二、模拟器问题

  

  当出现这个问题的时候,原因:没有选择模拟器。

  

  解决办法:

三、对象方法和类方法问题

 // 创建视图的工厂方法
+ (UIView *)rowViewInitWithicon:(UIImage *)icon shuju:(NSString *)shuju
{
rowView *viewtext = [[NSBundle mainBundle]loadNibNamed:@"rowView" owner:nil options:nil][];
[viewtext.btntouxiang setBackgroundImage:icon forState:UIControlStateNormal];
viewtext.mingzilablexiao.text = shuju; // 重点是这句
// 这是往通知中心添加一条通知 指定通知名称为 back 当观察者self监听到 back 通知是 就调用 callback
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(callback) name:@"back" object:nil]; /* 以下是报错信息:
+[rowView callback]: unrecognized selector sent to class 0x79d8
2013-11-26 15:31:02.581 lianxirenlianxi[1266:c07] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+[rowView callback]: unrecognized selector sent to class 0x79d8'
*/
// reason: '+[rowView callback]: 看到报错原因里的+就想到没有实现callback这个类方法。 // 由于self这个观察者是在类方法中添加的,指的是一个类,所以在调用方法的时候,他会去类方法中找有没有这个方法,不会去对象方法中找。因此我们也应该实现类方法。因此这里的self也只能调用类方法 // 由于实现的callback为对象方法 所以会报错
// 解决方法 把callback 写成类方法 供观察者调用
return viewtext;
}
//callback方法
- (void)callback
{
NSLog(@"");
}
//解决方法,将callback 写成类方法 供观察者调用
//callback方法
+ (void)callback
{
NSLog(@"");
}

四、Xib是用来描述视图长什么样子,一个项目中允许有很多xib,因此我们需要给xib绑定一个标识,即他View中对应的class是谁,就代表描述哪个class。

  

  Xib中owner的class是用来告诉xib中的View需要调用哪个对象的方法,就填谁。比如需要调用dog类中的方法,就填dog。

  

  注意:在连线选择上别连错了,

  步骤一:先考虑自己是想给视图添加控件了还是想给视图添加事件

  步骤二:添加控件就跟xib中的view连线。添加一些事件就给xib中的File’s Owner 连线。

五、代码顺序问题

 [UIView animateWithDuration:0.5 animations:^{
CGRect tmpFrame = sender.superview.frame;
tmpFrame.origin.x = self.view.frame.size.width;
sender.superview.frame = tmpFrame;
sender.superview.alpha = ;
} completion:^(BOOL finished) {
int index = [self.view.subviews indexOfObject:sender.superview];
[sender.superview removeFromSuperview];
[UIView animateWithDuration:0.2 animations:^{
for (int i = index; i<self.view.subviews.count; i++)
{
UIView *chlid = self.view.subviews[i];
CGRect tmp = chlid.frame;
tmp.origin.y -=kViewH+;
chlid.frame =tmp;
} }];
// 在这判断删除按钮是否允许点中,会在动画执行完毕的时候,判断。
_removeIteam.enabled = self.view.subviews.count>; }];
// 而在执行代码块之外,判断删除按钮是否允许点中是不对的,因为动画是在后台运行的,所以在执行动画的时候,就已经执行完判断语句了,而这时最后一个视图还没销毁掉,因此删除按钮永远不会不允许选中,也就不能在判断删除按钮是否允许点中。
// _removeIteam.enabled = self.view.subviews.count>1;

  删完最后一行之后,正确的效果:

  删完最后一行之后,错误的效果。原因,判断的位置放错了:

六、Xib描述视图的时候,已经固定好描述视图的宽高了,外界调用视图的时候,只需要设置x,y值就好了

  1.出现的问题,创建xib描述的视图时,将宽度设置为一个按钮的宽度了,导致删除按钮不能点击。

  

 #pragma mark 添加联系人
- (IBAction)AddPerson:(UIBarButtonItem *)sender { NSString *imgName=[NSString stringWithFormat:@"01%d.png",arc4random_uniform()];
NSString *labelName = arr[arc4random_uniform(arr.count)];
RowView *rowView = [RowView rowViewWithIcon:imgName name:labelName];
UIView *lastView = [self.view.subviews lastObject];
int nextY = lastView.frame.origin.y + kSpace + kItemHW ;
// 设置rowView的位置和尺寸
CGRect cg =CGRectMake(, nextY, kItemHW, kItemHW);
rowView.frame=cg; [self.view addSubview:rowView];
}

  错误原因:设置rowView的宽度为kItemHW,因此会有以上图片的出现。

  错误会导致删除按钮不能点击,原因:父视图的尺寸不够,即父视图能接收事件的尺寸只有一点点,也就导致超出父视图尺寸的子视图不能监听点击事件。还有一点需要注意,将子视图添加到父视图尺寸之外的位置,只要还在屏幕上就会显示子视图,只不过它不能接收任何事件。

  解决方法:

CGRect cg =CGRectMake(, nextY,rowView.frame.size.width , kItemHW);

  这样设置就好了,因为xib里面已经设置了rowView的尺寸了,外界不需要更改视图的宽度了,直接获取视图的宽度即可。

  正确效果:

七、UIToolBar问题

  注意UIToolBar中不能使用viewWithTag这个方法,获取UIToolBar里的子视图。因为UIToolBar里的子视图都是UIBarButtonItem,而UIBarButtonItem是继承NSObject的,因此不能使用viewWithTag获取UIToolBar里的子视图,

  viewWithTag:实现原理

 - (UIView *)viewWithTag:(NSInteger)tag
{   // 1.如果当前tag和当前视图tag相同,直接返回
  if (self.tag == tag) return self; // 2.如果和当前视图tag不相同,遍历当前视图的所有子控件,查找对应的tag。
  for (UIView *view in self.subviews) {
// 3.如果view不是UIView类或者UIView的子类直接返回nil
    if (![view isKindOfClass:[UIView class]]) return nil;
if (tag == view.tag) {
// 4. 返回有相匹配的视图
return view;
}
}
// 5.如果都没有找到,返回nil.
return nil;
}

八、结构体和对象问题

 // 这样定义是错的,结构体不是对象,声明变量是不需要加*
CGRect *frame = self.view.frame; //结构体变量正确定义:
CGRect frame = self.view.frame;
CGPoint center = self.view.center;
CGSize size = self.view.frame.size;

九、内存管理问题

  错误打印:

  

  正确打印:

  

  当对象被销毁,一定会调用的方法,可以用这个方法,判断对象在什么时候销毁,用这个调试。

  

  

十、创建模型的时候,尽量自定义一个工厂方法供外界调用。

  // 工厂方法,简化对象的实例化

+ (id)provinceWithName:(NSString *)name;

  工厂方法好处:简化对象的实例化,快速创建对象。

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

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

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

  2. ios常见问题 经验之谈

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

  3. iOS常见问题(5)

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

  4. iOS常见问题(4)

    一.非ARC内存管理问题. 有些同学在创建项目的时候忘记点ARC了,导致一些成员属性都莫名其妙的释放了.然后出现了一系列莫名其妙的错误. 在滚动UITableView的时候出现野指针错误. 一出现这些 ...

  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. ASP.Net 验证控件 RequiredFieldValidator

    使用 ASP.NET 验证控件可在网页上检查用户输入.有用于各种不同类型验证的控件,例如范围检查或模式匹配验证控件.每个验证控件都引用网页上其他位置的输入控件(服务器控件).当处理用户输入时(例如,当 ...

  2. Android studio 安装和使用

    之前一直是使用eclipse+ADT+SDK进行Android的开发的,不愿意转到Android studio是因为熟悉了eclipse的开发环境,最近偶然使用了android studio,感觉比使 ...

  3. PAT1015—— 德才论

    宋代史学家司马光在<资治通鉴>中有一段著名的“德才论”:“是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之君子,才胜德谓之小人.凡取人之术,苟不得圣人,君子而与之,与其得小人,不若得愚人 ...

  4. Part 92 Significance of Thread Join and Thread IsAlive functions

    Thread.Join & Thread.IsAlive functions Join blocks the current thread and makes it wait until th ...

  5. Oracle数据库对象_视图

    视图是一种非常重要的数据库对象,它的形式类似于普通表,我们可以从视图中查询数据. 实际上它是建立在表上的一种虚表,在视图中并不存储真正的数据,而是仅仅保存一条SELECT语句,对视图的访问将被转化为对 ...

  6. jQuery骨架

    jQuery选择器 jQuery操作DOM jQuery中的事件与应用 jQuery的动画与特效 Ajax在jQuery中的应用 jQuery常用插件 jQuery UI插件 jQuery实用工具函数 ...

  7. 济南学习 Day 2 T2 pm

    她[问题描述]给你L,R,S,M,求满足L≤ (S × x) mod M ≤ R最小的正整数 X.[输入格式]第一行一个数T代表数据组数.接下来一行每行四个数代表该组数据的L,R,S,M.[输出格式] ...

  8. C++ 11 之Lambda

    1.Lambda表达式来源于函数式编程,说白就了就是在使用的地方定义函数,有的语言叫“闭包”,如果 lambda 函数没有传回值(例如 void ),其回返类型可被完全忽略. 定义在与 lambda ...

  9. 关闭MyEclipse代码编辑器(breadcrumb)工具条

    1. 在工具栏上找“Toggle Breadcrumb”按钮,单击使其恢复未选中状态即可 2. 如果找不到这个按钮.通过菜单“Window->Customize Perspective”打开对话 ...

  10. Python的类变量和对象变量声明解析

    Python的类和C++一样,也都是存在两种类型的变量,类变量和对象变量!前者由类拥有,被所有对象共享,后者由每个对象独有.这里我主要想讨论一下他们的声明办法. 首先说的是对象变量: 只要是声明在类的 ...