您的位置:首页 > 移动开发 > IOS开发

iOS开发-C 和 OC 知识总结

2016-03-10 10:25 381 查看
1 . 冒泡排序
void bullut(intarray[],intcount){

for(inti
=0; i < count - 1;
i++) {
for(intj
=0; j < count -1-
i; j++) {

if (array[j] > array[j +1]) {

int temp = array[j];

array[j] = array[j +
1];

array[j +
1] = temp;

}

}

}

}

NSMutableArray *bullutArray = [NSMutableArrayarrayWithArray:@[@"3",@"4",@"6",@"1"]];

NSString *temp;

for (int i =0; i <bullutArray.count; i++)
{

for (int j =0; j <bullutArray.count -1
- i; j++) {

if ([[bullutArrayobjectAtIndex:j]integerValue] > [[bullutArrayobjectAtIndex:j
+ 1]integerValue]) {

temp = [bullutArrayobjectAtIndex:j];

[bullutArrayreplaceObjectAtIndex:jwithObject:[bullutArrayobjectAtIndex:j
+1]];

[bullutArrayreplaceObjectAtIndex:j +1withObject:temp];

}

}

}

2 . 内存的五大区

栈区:栈区里面的内存是由系统自动分配和释放,不需要程序员管理
先进后出,后进先出
一般局部变量和函数的形参都在栈区,作用域在函数内部
堆区:
堆区的内存分配和释放是由程序员管理
常量区:
注意:常量区的内容不允许被修改!!!
全局静态:
放在全局静态的变量只会初始化一次
变量的生命周期比较长,在程序退出时才会被销毁
代码区: 存放二进制文件的区域
比如:函数

当使用函数时,函数的形参会被临时存到栈区

3 . 属性的属性

#pragma mark - 3属性的属性

//在使用属性的时候,有三类词语去详细说明属性的细节

//第一类:读写性

@propertyint
num;

@property (readonly)int
numA;

// readonly代表只读:只生成get方法

@property (readwrite)int
numB; //默认

// readwrite代表读写,既有set和
get方法

//第二类:原子性(非原子性,原子性)

@property(atomic
)BOOL resultA;//默认

// atomic原子性,和多线程相关,线程安全性高

@property(nonatomic
)BOOL resultB;

// nonatomic非原子性,执行能够效率高,经常用到

//第三类:语义设置(内存)

//三个形容词 assign
retain copy

@property (assign)float
height;

//基本数据类型用assign比如int
float CGfloat

@property (retain)NSArray
*array;//NSArray是oc中的数组

//oc数据类型用retain

@property (copy)NSString
*str;
//当属性需要被拷贝的时候,比如NSString就用copy唯一特别的

4 . ARC(自动管理机制 ) MRC(手动管理机制)

- (void)setName:(NSString
*)name{

// _name = name;

//考虑内存优化ARC(自动管理内存机制)
——>MRC手动管理内存机制

//从内存角度去考虑实现set方法

//这也是使用@synthesize后,系统生成的set方法

//第一步判断传入的形参是否和原来的实例变量一样

if (_name
!= name) {

//第二步如果不一样,就使用release方法将原来的释放掉

[_namerelease];//释放原来的实例变量

//第三步再给实例变量赋值

_name = [namecopy];//形参调用copy方法,赋给实例变量

//copy (NSString)是可变的,retain
(oc类型)

//当属性用retain修饰时,将下面的这行代码copy变成retain

}

// 基本数据类型不需要考虑内存优化

// NSInteger 相当于long

}

- (NSString *)name{

// return _name;

return [[_nameretain]autorelease];//retain不变,一直不变

//无论属性用retain还是copy,get的方法都用retain

}

5 . 内存黄金法则

#pragma mark -
知识点1内存管理(针对对象使用,在堆区使用)

//
内存管理机制分为ARC和MRC,并且ARC是以MRC为基础的

// ARC
是xcode5.0开始的

//
垃圾回收机制适用于Java

// 通过‘引用计数‘的概念来管理内存

// 引用计数表示的是对象被引用的次数

# pragma mark -
知识点2内存管理黄金法则

/*

1
当使用new,alloc,copy方法,对象的引用计数会0 ->1

2当使用retain方法时,代表拥有了对象的使用权,此时的对象引用器会在原来基础上加1

3
当使用release方法时,对象的引用计数-1

4
当你使用alloc retain copy new方法时,需要对对象进行release或者autorelease操作

5
谁alloc,谁负责release

6当对象的引用计数器的值为0时,对象就会被系统回收

*/

6 . KVC

#pragma mark -
知识点 KVC

// kvc (间接访问实例变量的方法),在实例变量没有set
get方法的情况下,仍然可以访问

// key - value - coding键值编码

// 其中

// setValue forKey 相当于set方法

// setValue forKeyPath 相当于set方法

// valueForKey 相当于get方法

// valueForKeyPath 相当于get方法

7
. 类目 和 延展

类目:是为现有的类增加功能,注意:只能增加方法,不能增加实例变量或属性。
类目里的方法,只能是这个现有的类或者子类使用

延展:未类增加私有属性和方法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: