当前位置: 首页 > 工具软件 > iOS GraphView > 使用案例 >

iOS 工作笔记(一)

邹齐智
2023-12-01

    一直想要写个技术博,记录一下自己编程中遇到的点点滴滴,作为记录,也是作为分享,但一直没有下定决心坚持下去。今天开始,将工作和学习中遇到的各种问题以工作笔记的形式记录下来,希望可以经常总结,帮助自己提高,也分享出来,与大家共勉。由于之前是做C++的,接触ios 时间还不是很长,难免会有很多的错误认识和理解,希望看到的朋友指正和探讨,大家共同学习,共同进步! :)

    其实对于手机应用编程来讲,一般程序的逻辑还是比较简单的,业务的逻辑才是相对复杂的。因此更多的我们要注意的是编程中的细节问题,时间久了细节问题成了经验,那么只要把精力放在业务逻辑上或去研究一些新的技术也就手到擒来了!

    1.在iOS 中,经常碰到一些对象使用的时候为空的情况,很是头疼,却又找不到问题的原因。比如tableView的数据源add了很多对象,就是无法正确的读取出来,又比如我再appdelegate里面定义一个数组,想要当做为一个全局的变量,也是往往加入了对象却取不出来,这些经常是由于我粗心而忘记了初始化造成的!所以现在我遇到类似问题的时候经常会先去看看是否对象没有初始化就赋值使用了,或者是进行了错误的初始化导致!

    2.之前遇到的一个问题:从服务器上得到一个格式为“2|3|4|1|11|5|”这样的字符串,我需要取出其中的最大值来作为最长的柱状图来用,因此自己将该字符串分割开放到数组中,再用compare方法对数组中每个字符串进行比较大小,最终获得最大值,以最大值为最长的柱状图,将获得的所有数字按照比例画出相应柱状图。但是问题来了,如果最后一个数字超过9且为最大值,该柱状图就会超出我的屏幕范围,但是我设置的最长宽度也不会超出屏幕。找了好久,最后发现因为是字符串比较,因此@“10”<@"9",问题找到了。

    3.我们在用tableView得时候,经常会为了用户体验良好,进行数据的异步加载,因此千万不要忘了在将数据源赋值给控件显示数据的时候要做一下是否有数据源(datasource.count>0)的判断。

    4.不管用哪种多线程的方法,都要记得将刷新UI的操作放到主线程中去执行!

    5.在用UIView的动画的时候,出现一个错误nan,我发现必须要在用动画之前将原来的控件frame写一遍,然后再使用动画重画才不报错的正常显示。nan意思是not a number,一般是数字计算错误,/0,或者是sizeWithFont字符串为nil造成的。检测方法就是

!isnan(-x),不知道我表达清楚没有。。。^-^(算了,放代码吧。。)

                //判断是否为number

//                _everySecWidth = NAN;

//                if (!isnan(_everySecWidth)) {

//                    graphView.frame = CGRectMake(labelNumber.frame.origin.x+labelNumber.frame.size.width+2*SIDE, SIDE+i*_componentsHeight+2, _everySecWidth * [[_arrChannelUsedNum objectAtIndex:i] intValue] + 5, _componentsHeight-8);

//                }


    6.还是tableView的基础:if (!cell)中的代码是要复用的(控件),因此,每个cell中都会有(如果大多cell都想要放置该控件,可以hidden=YES,要用时设为NO),而if (!cell)外的代码则是不想复用的代码和赋值的代码。

    7.iOS中三种多线程方法:NSThread,NSOperation,gcd。开始一直用NSOperation来的,觉得挺好用的,因为gcd是C写法,所以觉得很难记,后来用了一段时间,感觉真心是简单啊!所以建议大家(主要是苹果建议)多多使用,敲程序这东西,总会是敲一敲就熟了的~

    8.tableView的header和footer都是有默认高度的,如果手动设置为0,目的是让其消失,是无用的,高度还是默认值,如果手动设置为1,发现高度真的为1了。

    9.当计算cell高度时,如果你计算错误产生了负值,系统会自动将其优化成其绝对值!真心不知道这优化是好还是不好,弄得我半天没找到错误所在。。。 - -|

    10.判断用户输入为空 或 为空格 的方法:

#pragma mark - 判断用户输入的账号密码是否为空或空格

- (BOOL)isEmpty:(NSString*)str

{

   if (!str)

    {

       returnYES;

    }

   else

    {

        NSCharacterSet *set = [NSCharacterSetwhitespaceAndNewlineCharacterSet];

        NSString *trimedString = [strstringByTrimmingCharactersInSet:set];

        

       if (0 == [trimedStringlength])

        {

           returnYES;

        }

       else

        {

           returnNO;

        }

    }

}

    11.出现EXC_BAD_ACCESS时一般是引用了已经释放的内存空间导致的crash,解决办法就是删除多余的release,或添加相应的retain操作

    12.在设置UIView及其子类的边框时,我们用到layer中的borderWidth和borderColor还有cornerRadius,设置的时候要记得一下四点

1)添加QuartsCore.frame库

2)添加QuartsCore的相应头文件

3)view.layer.masksToBounds =YES;

4)view.layer.borderColor = [[UIColorblackColor]CGColor];

    13.另外说一些自己了解到的路由器方面的信息。

首先一句话:对路由器信号影响最大的莫过于墙壁了。

现在很多路由器有很多种模式:      健康模式,正常模式, 穿墙模式。

这三种模式从你的WiFi体验中分别为,不好,    隔墙不好, 各种好。

说白了就是其功率的大小问题分别为   小功率,  稍大功率, 超大功率。

对身体的影响显而易见为别是     影响较小, 有一定影响,很伤身!

因此大家要根据需要选择相应模式,不要为了一时爽,结果很快火葬场 - -|

    好了,今天先到这里吧。小撸怡情,大撸伤身,强撸灰飞烟灭啊~    大家保重身体!

 类似资料: