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];
}
}
}
//在使用属性的时候,有三类词语去详细说明属性的细节
//第一类:读写性
@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;
// _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
}
#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时,对象就会被系统回收
*/
#pragma mark - 知识点 KVC
// kvc (间接访问实例变量的方法),在实例变量没有set get方法的情况下,仍然可以访问
// key - value - coding键值编码
// 其中
// setValue forKey 相当于set方法
// setValue forKeyPath 相当于set方法
// valueForKey 相当于get方法
// valueForKeyPath 相当于get方法