Decorative image frame

寒流‘s Blog

编程与生活

寒流‘s Blog

《iOS开发进阶》阅读笔记(二)——开发技巧

收起键盘

在UIViewController中收起键盘,处了调用相应控件的resignFirstResponder方法外,还有另外三种方法:

  • 重载UIViewController的touchBegin方法,然后在里面执行[self.view endEditing:YES];,这样单击UIViewController的任意地方,就可以收起键盘;
  • 直接执行[[UIApplicatoin sharedApplication] sendAction:@selector(resignFirstResponder) to:nil from:nil forEvent:nil];,用于在获得当前UIViewController比较困难的时候使用。
  • 直接执行[[[UIApplicatoin sharedApplication] keyWindow] endEditing:YES];
Read More...

《iOS开发进阶》阅读笔记(一)内存管理释疑

ARC

ARC能够解决iOS开发中90%的内存管理问题,但是另外还有10%的内存管理是需要手动管理的,主要就是与底层Core Foundation对象交互的部分,因为底层Core Foundation对象由于不在ARC的管理下。

使用ARC需要额外注意的两个问题:
1.过度使用block产生的循环引用问题。
2.底层Core Foundation对象需要手动进行内存管理。
Read More...

iOS中处理四舍五入的问题

处理四舍五入主要使用下面这个方法:

1
2
3
4
5
6
7
8
9
10
-(NSString *)notRounding:(float)price afterPoint:(int)position{
    NSDecimalNumberHandler* roundingBehavior = [NSDecimalNumberHandler decimalNumberHandlerWithRoundingMode:NSRoundDown scale:position raiseOnExactness:NO raiseOnOverflow:NO raiseOnUnderflow:NO raiseOnDivideByZero:NO];
    NSDecimalNumber *ouncesDecimal;
    NSDecimalNumber *roundedOunces;
    
    ouncesDecimal = [[NSDecimalNumber alloc] initWithFloat:price];
    roundedOunces = [ouncesDecimal decimalNumberByRoundingAccordingToBehavior:roundingBehavior];
    [ouncesDecimal release];
    return [NSString stringWithFormat:@"%@",roundedOunces];
}

介绍一下参数:
price:需要处理的数字,
position:保留小数点第几位,
然后调用
1
2
3
4
float s =0.126;
    NSString *sb = [self notRounding:s afterPoint:2];
    NSLog(@"sb = %@",sb);
输出结果为:sb = 0.12

接下来介绍NSDecimalNumberHandler初始化时的关键参数:decimalNumberHandlerWithRoundingMode:NSRoundDown,
NSRoundDown代表的就是 只舍不入。
scale的参数position代表保留小数点后几位。

Read More...

Category添加属性所想到的

iOS中category和extension相辅相成,长得也很相似。category与extension的主要区别:

Category:分类、类别

  • category主要用来增加类的方法,并且适用于子类。
  • category不能添加实例变量(这个并不是属性),可以添加readonly的属性。
  • 如果要添加readwrite的属性的话,需要用到runtime方法。

Extension:扩展

  • 可以增加被扩展类的属性和方法。
  • Extension可以理解为匿名类别。
  • 定义的方法必须在implementation中实现。
Read More...

常用排序算法

在此总结一下常用排序算法的代码实现

#include <iostream>
using namespace std;
typedef int ElemType;

/*
1、插入排序
(1)直接插入排序算法
算法思想:将等排序列划分为有序与无序两部分,然后再依次将无序部分插入到已经有序的部分,最后

就可以形成有序序列。
操作步骤如下:
1)查找出元素L(i)在表中的插入位置K;
2)将表中的第K个元素之前的元素依次后移一个位置;
3)将L(i)复制到L(K)。
*/
时间复杂度为:O(n^2)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void InsertSort(ElemType arr[], int length)
{
int i, j;
ElemType guard; // 哨兵

for (i = 1; i < length; ++i)
{
if (arr[i]() < arr[i-1]()) // 在无序部分寻找一个元素,使之插入到有序部分后仍然有序
{
guard = arr[i]();// 复制到“哨兵”
// 将第i个元素之前的元素依次后移一个位置
for (j = i - 1; arr[j]() > guard; j--)
{
arr[j + 1]() = arr[j]();
}

arr[j + 1]() = guard; // 复制到插入位置
}
}
}
Read More...