objective-C基础总结

分类:iOS | 作者:凹凸曼 | 发表于2013/11/28

最新的xcode5.0默认创建项目是开启了ARC的 releas就是多余的,不过对于内存管理release retain copy还是最好学习一下。

ARC用的strong weak代替retian assign ,不然你考虑向ios5.0以下 兼容就会存在问题哈

1、每个程序都有自己的UIWindow, UIWindow继承UIView  
2、UIView的问题
谁来控制UIView之间的切换?
谁来管理UIView的生命周期?
谁来给UIView装配数据?
谁来监听UIView事件?
答案:控制器 UIViewController
3、运行原理?
1>创建一个UIApplication对象
2>开启消息循环(main loop)
UIApplication对象的应用程序的象征
3>再创建一个UIApplication的delegate对象,负责监听UIApplication的生命周期
4>当UIApplication的生命周期发生改变时,会给delegate发送不同的消息
A.当第一运行程序的时候
didFinishLaunchingWithOptions (加载完毕)->
applicationDidBecomeAction(获取焦点)
B.当点击home键的时候
applicationWillResignActive(失去焦点)->
applicationDidEnterBackground(进去后台)->
C.当再次点击应用图标重新进去应用的时候:
applicationWillEnterForeground(进去前台)->
applicationDidBecomeActive(获取焦点)

UIApplicationMain 第四参数设置代理 第3个参数指定UIAppliation的类名(或者子类) nil为空时候 默认UIAppliation

4、UI元素一般assign即可 why?
@property (nonatomic,assign)UITextField *user;

5、UITextField键盘弹回去
[self.pwd resignFirstResponder];
[self.view endEditing:(true)];

6、UIView
-(void) removeFromSuperview; //从父控件移出
-(void) addSubview:(UIView *)view; 添加子控件到父控件
-(void) exchangeSubviewAtIndex:(NSInteger)index1 withSubviewAtIndex:
(NSInteger)index2;两个控件切换层次
-(void) insertSubview:(UIView *)view atIndex:(NSInteger) index;
– (UIView *) viewWithTag:(NSInteger)tag;

7、UILable UIButton
    CGSize labelsize=[s sieWithFont:font constrainedToSize:size
      lineBreakMode:UILineBreakModeWordWrap];
8、
NSUserDefaults读取和写入自定义对象

9、oc  点语法 与java语法不一样
person.age=10      //oc中这个不是设在成员变量值 这个是set方法相当于 [person setAge:10]
int age=person.age //oc中这个不是成员变量值赋值 是get方法相当于 int age=[person age]
self.age=10 //不是访问成员变量 这是set方法相当于 [self setAge:10]
一般成员变量都加下划线 如 _age

10、oc 打印oc对象 %@  会调用description方法 返回内存的地址  可以重写description方法

11、oc 字符串 链接  [NSString stringWithFormat:@”age is %i and no is %i”,_age,_no]  一般静态创建的对象,是自动释放内存

12 、self 在动态方面“-”表示指向对象  如果在静态方法里 “+”,表示指向类名, 与java不同

13、@synthesize age 自动生成getter setter的实现 默认回去访问跟age同名的成员变量,如果成员变量找不到,会自动生成私有成员变量
@synthesize age=_age 访问的成员变量_age 而不是age
xcode 4.5 只写@property 不用写了 @synthesize 并去默认去访问下划线成员变量 如果没有 会自动生成
14、注释
#pragma mark – 方法分组
#pragma mark 函数说明
15、内存法则 (alloc new copy)”谁创建 谁释放 ,谁使用 谁释放“ 谁使用,谁retain;谁retain 谁release
当吧一个对象塞进数组中时,这个对象计素会加1 也就数组会对她里一次retain操作
数组被销毁的时候,会对内部所有元素做一个release操作

16、野指针 [stu release]二次释放会报错   空指针 [nil release]不会报错
17、头文件 @class 类名  用于其他类内,申明类  比 #import(引用该类所有信息 ) 性能更高
18、@property (retain) Book *book //这里的retain : 在set方法中 release旧值 retain新值
基本数据类型不需要 管理内存(用assign)  继承NSObject 需要管理内存
默认 @property int age 等于 @property (assign) int age
@property 特性
读写处理 : readwrite/readonly   默认 readwrite
setter 处理: assign /retain /copy  默认 assign
原子性 :atomic/nonatomic   默认atomic
指定方法名 :getter setter
19、@autoreleasepool 创建一个自动释放chi  当池子 销毁 会把里面的每个对象放一个release
ios 5.0 后@autoreleasepool{
}
ios 5.0 前 NSAutoreleasePool *pool [[NSAutoreleasePool alloc] init];
[pool release];或 [pool drain];
一般系统对象 静态方法创建对象 ,不需要管理内存   因为是autorelease
20、category 不修改原来的类 ,对类(自己或系统自带的类)方法的扩展  
21、protocol 声明的方法可以被任何类实现 一般叫代理(也可以说是监听)
22、block 把代码封装     在任何时候都可以调用 (可以访问局部变量 默认情况不能改 但是__block 声明变量就可以在block内部修改

23、 copy 创建的一个副本实现NSCoppying协议(如可以创建NSString NSArray NSDictionart)
copy 原则 改变副本的时候 不会影响原来的对象
//NSString
调用的 copy方法产生的是对象本身(不可变副本 由于原对象本来不可变,所以为了性能着想 copy直接返回对象本身)  mutableCopy方法产生是可变对象
调用copy或mutableCopy 都要retain 也需要release
//NSMutableString
调用 copy 也深度复制一个对象
24、NSRange NSPoint NSSize NSRect结构体 经常用 NSRange range=NSMakeRange(location,len) 创建NSRange
NSString *str=NSStringFromRange(range) 直接打印range对象里的数据

25、NSString 可以用alloc创建 也可以静态创建 stringWith….
(从文件读到字) stringWithContentofFile

26、常用函数
NSString
//大小写转换
uppercaseString
lowercaseString
capitalizedString  首字母变为大写 其他小写
//字符串比较
isEqualToString 检测字符串的内容是否相同
compare   比较字符的大小
caseInsensitiveCompare 比较 忽略大小写
//搜索字符串
rangeOfString 搜索字符串函数
hasPrefix 判断字符开头 hasSuffix 判断字符串结尾
//截取字符串
substringFromIndex  字符截取 从索引开始截取
substringToIndex 从头部截取 到索引 substringWithRange 截取中间
componentsSeparatedByString 通过字符 分割
substringWithRange
//字符串与路径
pathWithComponets  将数组中的所有字符串拼成路径
pathComponets  将路径切割成数组
isAbsolutePath  是否为绝对路径  lastPathComponent 最后一个目录
stringByDeletingLastPathComponet 删除最后一个目录
stringByAppendingPathComponent  最后一个目录拼接 目录
//扩展名
pathExtension 返回扩展名
stringByDeletingPathExtension 删除扩展名
stringByAppendingPathExtension
//其他用法
intValue string转换为int
length   计算字数
characterAtIndex  取出字符  UTF8String 返回C语言的字符串

NSMutableString
setString 设置字符串
appendString 拼接字符串 appendFormat拼接可变字符串
replaceCharactersInRange 替换字符串 insertString 插入字符串
deleteCharactersInRange 删除字符串
27、NSArray
arraywithObject  创建array
count  数组个数            containsObject  判断是否有某个字符串
lastObject 获取数组最后一个元素   objectAtIndex 获取某位置的字符串
indexOfObject 查找元素在数组的位置 isEqualToArray 数组内容是否相同
makeObjectPerformSelector 给数组里面的元素发送消息,也就是数组里所有对象调用方法

//数组循环
enumerateObjectsUsingBock 用block bian利数组 官方推荐
objectEnumerator   获取数组迭代器
reverseObjectEnumerator 反方向迭代器
//派生新数组
arrayByAddingObject   arrayByAddingObjectsFromArray
subarrayWithRange 从一个数组截取数据到一个新数组返回
//其他用法
componentsJoinedByString 吧数组链接起来 writeToFile //把数组写到文件
arrayWithContentsOfFile  从文件读取数组 文件有严格要求
//数组排序
sortedArrayUsingSelector:@selector(compare:)  //返回一个拍好序的数组
28、NSMutableArray
addObject 添加元素  removeObject 删除对象 replaceObjectAtIndex 替换
sortUsingSelector //当前数组排序
29、NSDictionary
dictionaryWithObject dictionaryWithObjectsAndkeys
count k和v的对数  objectForKey 根据key找到value
writeToFiel 将字典写入文件 产生的是xml文件
dictornaryWithContentsOfFile 读取
allkeys 返回所有keys allValues 返所有values
//遍历字典
for( id key in dict)
keyEnumerator key迭代器  valueEnumerator value迭代器
enumerateKeysAndObjectsUsingBlock block遍历
//内存管理
一个对象称为字典的key或者value时,会做一次retain操作
当字典销毁时候 key和value都会做一次release

NSDictionary
setObject 添加元素  addEntriesFromDictionary 字典添加字典中
数组和字典都需要oc对象 NSNumber NSValue就去包装为 OC对象
30、NSNumber 吧基本数据包装对象  它 是NSValue的子类 numberWith…  
31、NSValue  把任何包装对象  valueWith….
//封装结构体为OC对象
typedef struct d{ int year;int month; int day;}Date;
Date date={2013,4,7}
char *type=@encode(Date);
value:&date WithObjCType:type
//value:(const void *) withObjCType:(const char*) 封装
//getValue:(void *) 取出结构体
Date date1;
[value getValue:&date1];
32、NSNull 用于集合中表示 空值  
33、NSDate
dateWithTimeIntervalSinceNow 现在开始增加多少秒
distantFuture 返回一个未来的时间 随机
distantPast 返回一个遥远的过去时间

timeIntervalSince1970 返回1970-1-1开始走过的毫秒数
timeIntervalSinceDate 跟其他时间对比
earlierDate 返回比较早的时间 laterDate 返回比较晚的时间

NSDateFormatter *dateFormat
formatter.dateFormat=@”yyyy-MM-dd HH:mm:ss”;
formatter.locale=[[NSLo
[formdatter stringFromDate:date]

34、NSObject
isKindOfClass 是否为某个类或子类  isMemberOfClass判断对象是否属于某类
conformsToProtocol:@protoclo(study) 判断是否 遵守某协议
respondsToSelector:@selector(test) 判断是否某个方法
performSelector:@selector(test) 间接调用test方法
35、反射 通过字符串 实例化一个对象
//类的反射
NSString *str=@”Person”
Class(str)
Person *person=[[class alloc] init]
//方法的发射

http://www.apoyl.com/?p=1614

NSString *method=@”test”
SEL selector=NSSelectorFromString(method)
[person performSelector:selector]
36、单列设计模式 数据共享时 用表示单列  sharedXXX currentXXX defaultXXX
//第二种写法 线程安全
static id sharedMyManager;
+(id) sharedThemeManager{
@synchronized(self){ //枷锁 避免多个线程进来创建类
if(sharedMyManager==nil)
sharedMyManager=[[self alloc] init];
}
return sharedMyManager;
}
//第三种写法 队列
+(id) sharedThemeManager{
static dispatch_once_t once;

dispatch_once(&once,^{
sharedMyManager=[[self alloc] init];
}
return sharedMyManager;
}
单列一般要重写下面几个方法
allocWithZone    retain  copyWithZone
release  retainCount autorelease

37、通知中心 NSNotificationCenter
发送postXXX  接收 add***
38、KV0 2个对象之间的通讯
//注册监听对象
-(void)addObserver:(NSObject *)observer ….
//回调函数
-(void) observeValueForKeyPath:(NSString *) keyPath …
39、KVC  -(void)setValue:(id)value forKey:(NSString *)key;
-(id)valueForKey:(NSString *)key;
//fotkeyPath 分割-
-(void)setValue:(id)value forKeyPath:(NSString *)keyPath;
//设置一组
-(void)setValuesForKeysWithDictionary:(NSDictionary *)keyedValues;
-(NSDictionary *)dictionaryWithValuesForKeys:(NSArray *)keys;
40、对文件的操作NSManager
contentsOfDirectorAtPath 浅度遍历 查看目录下的文件
subpathsOfDirectoryAtPath  深度遍历
createDirectorAtPath 创建目录
removeItemAtPath 删除文件 目录
copyItemAtPath copy文件或目录
对内容的操作NSHandle
fileHandleforReadingAtPath 只读方式打开文件生成文件句柄
truncateFileAtOffset 将文件内容截断为0字节
seekToEndOfFile 读写指针放在尾部
归档
数组,字典
大数据归档 NSKeyedArchiver *archiver
[archiver encodeObject:array forKey:@”array”]
[archiver encodeobject:dict forKey:@”dict”]
[archiver finishEncoding]
[data WriteToFile:Path]
还有另外说明 上面的部分函数没有写完整的 哈哈 oc的语法长的就是句子!

本文出自 “凹凸曼” 博客,请务必保留此出处  http://www.apoyl.com/?p=1614
Tag:

日志信息 »

该日志于2013-11-28 11:33由 凹凸曼 发表在iOS分类下, 你可以发表评论。除了可以将这个日志以保留源地址及作者的情况下引用到你的网站或博客,还可以通过RSS 2.0订阅这个日志的所有评论。

目前盖楼 (0)层:

发表评论 »

« »