`
cyxlgzs
  • 浏览: 89737 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

OC学习总结(二)

 
阅读更多

oc学习总结(二)

7、内存管理

》以下两种情况发生时,所有者对象将会获得该对象的所有权
    创建或者复制对象:alloc, allocWithZone:, copy, copyWithZone:, mutableCopy, mutableCopyWithZone:
    保留对象:retain
》在不需要时所有者对象必须释放对该对象的所有权
    release, autorelease
》release的一些场景
    1、alloc后不用时
    2、数组的addObject后
    3、对象持有其他对象所有权时的dealloc方法中

8、点语法

》赋值
    assign:直接赋值(相当于一个别名),default。
    retain:保留对象,两个对象指向同一内存区域
    copy:拷贝对象,开辟新空间。指向不同内存空间。有时相当于retain。必须实现NSCopying协议
》读写性
    readwrite:生成getter和setter,default
    readonly:只有getter
》原子性(多线程环境下)
    nonatomic:不锁定,
    atomic:锁定,线程保护,default

9、文件管理

》NSFileManager
    文件(目录)的创建,删除等操作,构造方法[NSFileManager defaultManager]
》NSFileHandle
    文件内容的创建,修改等操作,可以创建分别用于读、写和修改的handle对象

10、NSTimer定时器

》常用方法
 + (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti
 target:(id)aTarget selector:(SEL)aSelector
  userInfo:(id)userInfo repeats:(BOOL)yesOrNo;
ti:间隔时间,秒数
target:selector所属对象
selector:间隔执行方法,一般包含一个NSTimer参数timer,可以将当前创建的NSTimer传递给该方法
userInfo:一般用于传递参数给selector,取出timer.userInfo
repeats:是否重复执行

》在控制台程序中,为避免main函数过早return后,定时器无法起作用,
这时必须使用[[NSRunLoop currentLoop] run]来使程序一直运行起

11、对象的深浅拷贝

》拷贝必须实现拷贝协议NSCopying和NSMutableCopying,实现copyWithZone方法

》copy和mutableCopy都是NSObject中的方法,调用时会调用NSCopying协议中得copyWithZone方法

》Foundation框架中,当copy的是一个不可变对象时,相当于retain(cocoa做得内存优化)
mutableCopy或者是可以变对象的copy都是拷贝一个新对象

》浅拷贝:只拷贝对象本身,不拷贝对象的属性;深拷贝:拷贝对象包含的属性;Foundation中支持拷贝的对象
都只是浅拷贝,包括NSNumber,NSArray,NSString,NSDictionary,NSMutableArray,
NSMutableDictionary,NSMutableString

12、对象的归档

》归档NSKeyedArchiver,可以指定key来序列化多个对象在同一个文件中

》解归档NSKeyedUnarchiver

》对象必须实现NSCoding协议才能进行归档和解归档
    - (void)encodeWithCoder:(NSCoder *)aCoder; 归档
    - (id)initWithCoder:(NSCoder *)aDecoder;   解归档

13、 单例模式

》应用场景
    1、保存全局数据
    2、重量级对象:初始化耗费资源的对象,提高效率

》单例对象的创建
    1、定义一个静态全局值为nil的对象 static AppManager *manager = nil;
    2、定义一个类方法创建对象 + (id)shareManager;
        + (id)shareManager{
            //此处必须加线程保护,防止多线程环境中创建出多个实例
            @synchronized(self){
                if(manager==nil){
                    manager = [[AppManager alloc] init];
                }
            }

            return manager;
        }
    3、覆盖+ (id)allocWithZone:(NSZone *)zone;方法,防止直接调用alloc方法创建出新的对象
    4、覆盖- (id)copyWithZone:(NSZone *)zone;方法,防止调用copy(返回静态实例)方法创建出新对象
    5、覆盖release(不做任何操作),autorelease(返回静态实例)方法,防止对象的销毁
    6、覆盖retain方法,返回静态实例
    7、覆盖retainCount方法,直接放回UINT_MAX
<script type="text/javascript"> $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering = $('<ul/>').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($('<li/>').text(i)); }; $numbering.fadeIn(1700); }); }); </script>

版权声明:本文为博主原创文章,未经博主允许不得转载。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics