03 2014 档案

摘要:1.iOS基于UNIX系统,因此从系统的稳定性上来说它要比其他操作系统的产品好很多2.iOS的系统架构分为四层,由上到下一次为:可触摸层(Cocoa Touch layer)、媒体层(Media layer)、核心服务层(Core Services layer)、核心操作系统层(Core OS layer)如图:(1)触摸层:为应用程序开发提供了各种常用的框架并且大部分框架与界面有关,本质上来说它负责用户在iOS设备上的触摸交互操作。它包括以下这些组件:Multi-Touch Events Core Motion CameraView Hierarchy Localization ... 阅读全文
posted @ 2014-03-27 20:44 谦默 阅读(11981) 评论(2) 推荐(0)
摘要:1.代理模式核心思想:A类委托B类做某件事,然后A类获取B类的执行的返回结果!举例:女孩想去买电影票,但是自己不亲自去而是委托男孩了解电影电影票信息,同时女孩获得男孩买票的结果,代码模拟实现:/*********************************** Gril.h *************************************/#import @class Boy;@interface Gril : NSObject// “女孩”想去买电影票- (void)buyTicket;// “女孩”声明自己的代理对象@property (nonatomic,retain) B 阅读全文
posted @ 2014-03-27 18:42 谦默 阅读(543) 评论(0) 推荐(1)
摘要:NSDate为日期时间类对象,简单操作:注意:直接NSLog输出NSDate对象,默认是以0时区为标准,因此会比北京时间少8小时1.将Date格式转换为自定义格式的字符串格式 // 自定义Date时间日期格式 // 创建日期时间对象 NSDate *date = [NSDate date]; // 借助日期时间对象格式化对象 NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; // 定义要显示的时间日期格式 HH:表示24小时格式 hh:表示12小时格式 fo... 阅读全文
posted @ 2014-03-22 14:19 谦默 阅读(363) 评论(0) 推荐(0)
摘要:1.Foundation框架中提供了很多的集合类如:NSArray,NSMutableArray,NSSet,NSMutableSet,NSDictionary,NSMutableDictionary但是这些类只能存放OC对象类型的数据2.如果要存放基本数据类型,必须先将基本暑假类型包装成对象类型然后再用集合类进行存储,OC中提供的包装类是NSNumber,NSValue。其中NSNumber继承于NSValue。3.NSNumber主要针对于基本数据类型的包装,NSValue主要针对结构体进行包装4.将包装成NSNumber或NSValue对象类型后存放在数组中,然后从集合类中取出NSNum 阅读全文
posted @ 2014-03-22 13:32 谦默 阅读(1481) 评论(0) 推荐(1)
摘要:Foundation框架中常用的类有:NSString、NSArray、NSSet、NSDictionary以及它们对应的子类NSMutableString、NSMutableArray、NSMutableSet、NSMutableDictionary,父类统一为不可变而子类可变,还包括NSDate、NSObject可变和不可变的区别是对象内容的可变和不可变,子类既然是继承父类那么子类可以使用父类中的任意方法1.NSString类的操作使用NSString类的对象初始化方法创建字符串 //创建无参数的字符串 NSString *str2 = [[NSString alloc] in... 阅读全文
posted @ 2014-03-22 00:59 谦默 阅读(1633) 评论(0) 推荐(3)
摘要:1.安装Xcode工具后会自带开发中常用的框架,存放的地址路径是:/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/System/Library/Frameworks/2.在iOS开发中所有框架中Foundation框架是最基础的框架,Foundation框架里面包含了常用的类和数据类型比如结构体、枚举等3.使用Foundation框架只要包含它的主头文件即可,主头文件里面包含了框架中所有内容的头文件4.Foundation框架中常用的结构体 阅读全文
posted @ 2014-03-21 02:22 谦默 阅读(2635) 评论(0) 推荐(2)
摘要:strong:适用于OC对象,作用和非ARC中的retain作用相同,它修饰的成员变量为强指针类型weak:适用于OC对象,作用和非ARC中的assign作用相同,修饰的成员变量为弱指针类型assign:适用于非OC对象类型在OC对象循环引用的时候一端为strong类型,另一段为weak类型示例代码如下:/****************************** Teacher.h文件 ***********************************/#import @class Student;@interface Teacher : NSObject@property (nona 阅读全文
posted @ 2014-03-14 02:15 谦默 阅读(1186) 评论(0) 推荐(0)
摘要:一、ARC基本简介ARC:Automatic Reference Counting 自动引用完全消除了手动管理内存的烦琐,编译器会自动在适当的地方插入适当的retain、release、autorelease语句。开发者不再需要担心内存管理,因为编译器已经处理了一切ARC是自iOS 5之后增加的新特性:ARC 是编译器特性,而不是 iOS 运行时特性,它也不是类似于其它语言中的垃圾收集器比如,Java中的垃圾回收是在运行时自动检测对象有没有用如果没用则进行回收ARC和手动内存管理性能是一样的,有时还能更加快速,因为编译器还可以执行某些优化Xcode5之后新建程序默认遵循ARC机制二、ARC基本 阅读全文
posted @ 2014-03-13 16:35 谦默 阅读(1404) 评论(0) 推荐(0)
摘要:设计简单的微博模型:用User类和Status类来模拟实现在非ARC机制下有两种方式,两者没有太大的区别之所以写了两种只是为了方便学习和对比两种写法! 第一种:没有使用atuorelease和自动释放池代码容易理解,但是开发中一般不这么写:/****************************** User.h文件 **************************************//* 设计微博用户模型: 姓名、微博号码、密码、头像、性别、手机、生日 */#import // 枚举和结构体不用关心内存问题typedef enum { SexMan, // 男... 阅读全文
posted @ 2014-03-13 12:44 谦默 阅读(963) 评论(2) 推荐(0)
摘要:autorelase:可以将对象交给自动释放池中,释放池销毁的时候对里面的对象做一次release操作代码如下 @autoreleasepool { Person *person = [[[Person alloc] init] autorelease]; }上面代码虽然正确,但是为了简化代码在开发中一般是提供一个类方法来专门创建对象,并且将管理内存的代码封装到类方法中:注意:定义方法名的时候以类名开头,返回类型为instancetype,而且在创建对象的时候使用self关键字/******************************** Person.h文件 *... 阅读全文
posted @ 2014-03-12 19:14 谦默 阅读(423) 评论(0) 推荐(0)
摘要:1.autorelease 基本用法对象执行autorelease方法时会将对象添加到自动释放池中当自动释放池销毁时自动释放池中所有对象作release操作对象执行autorelease方法后自身引用计数器不会改变,而且会返回对象本身2.autorelease 的优点autorelease实际上只是把对release的调用延迟了,对于每一次autorelease系统只是把该对象放入了当前的autorelease pool中,当该pool被释放时,该pool中的所有对象会被调用Release因为只有在自动释放池销毁的时候它里面的对象才销毁,因此不用关心对象销毁的时间也就不用关心什么时候调用rel 阅读全文
posted @ 2014-03-12 02:19 谦默 阅读(913) 评论(2) 推荐(0)
摘要:手把手教你ARC——iOS/Mac开发ARC入门和使用Revolution of Objective-c本文部分实例取自iOS 5 Toturail一书中关于ARC的教程和公开内容,仅用于技术交流和讨论。请不要将本文的部分或全部内容用于商用,谢谢合作。欢迎转载本文,但是转载请注明本文出处:http://www.onevcat.com/2012/06/arc-hand-by-hand/本文适合人群:对iOS开发有一定基础,熟悉iOS开发中内存管理的Reference Counting机制,对ARC机制有听闻很向往但是一直由于种种原因没有使用的童鞋。本文将从ARC机理入手对这个解放广大iOS开发者 阅读全文
posted @ 2014-03-11 23:07 谦默 阅读(659) 评论(0) 推荐(0)
摘要:1.@class使用场景:对于循环依赖关系来说,比方A类引用B类,同时B类也引用A类; 可以看出Person和Card互相引用,此时如果使用#import编译报错!因此当使用@class在两个类中相互声明,编译不会报错!用法:使用 @class 类名; 就可以引用一个类,说明一下它是一个类@class和#import的区别:#import方式会包含被引用类的所有信息,包括被引用类的变量和方法;@class方式只是告诉编译器在A.h文件中 B *b 只是类的声明,具体这个类里有什么信息,这里不需要知道,等实现文件中真正要用到时,才会真正去查看B类中信息如果有上百个头文件都#import了同一个. 阅读全文
posted @ 2014-03-11 21:04 谦默 阅读(1028) 评论(0) 推荐(1)
摘要:iOS 基本内存管理-多对象内存管理(2)中可以看到涉及到对象的引用都要手动管理内存:每个对象都需要写如下代码// 1.对要传入的"新车"对象car和目前Person类对象所拥有的"旧车"_car进行判读- (void)setCar:(Car *)car{ if (_car != car ) { [_car release]; // 释放旧车 _car = [car retain]; // 新车引用计数加一 }}// 2.Person类在回收的时候也必须将它所拥有的车对象回收- (void)dealloc{ // Person对象被回收 那么将Per.. 阅读全文
posted @ 2014-03-11 15:46 谦默 阅读(394) 评论(0) 推荐(0)
摘要:/* 多对象内存管理: 以人拥有车为例涉及到@property底层set方法管理内存的实现 注意:人在换车的时候要进行当前传入的车和人所拥有的车进行判断 *//********************************* Person.h文件 *********************************/#import #import "Car.h"@interface Person : NSObject{ Car *_car;}- (void)setCar:(Car *)car;- (Car *)car;@end/*********************** 阅读全文
posted @ 2014-03-10 20:46 谦默 阅读(216) 评论(0) 推荐(0)
摘要:单个对象的内存管理非常简单无非就是alloc对应release,retain对应release。但是如果涉及到很多对象,而且对象与对象有联系的时候该怎么去管理对象的内存呢。比如同样一本书有好3个人购买,那意味着3个人都在引用这本书。在内存中如图所示:那么如果Person对象引用Book对象的话就必须给Book对象的引用计数+1,如果不再引用Book对象就要把Book对象中的引用计数减1。遵循"有加必有减"1.多对象内存管理原则分析只要还有人在使用某个对象,那么这个对象就不会被回收只要你想用这个对象,就让对象的计数器+1当你不再使用这个对象时,就让对象的计数器-1只要有人在使 阅读全文
posted @ 2014-03-10 11:48 谦默 阅读(374) 评论(0) 推荐(1)
摘要:1.什么是内存管理移动设备的内存极其有限,每个app所能占用的内存是有限制的当app所占用的内存较多时,系统会发出内存警告,这时得回收一些不需要再使用的内存空间。比如回收一些不需要使用的对象、变量等管理范围:任何继承了NSObject的对象需要去管理内存,但是对于对其他基本数据类型(int、char、float、double、struct、enum等)结构,枚举等不用去关心内存- (void)test{ int a = 20; int b = 10; Person *person = [[Person alloc] init]; // 方法未退出之... 阅读全文
posted @ 2014-03-09 16:30 谦默 阅读(1155) 评论(0) 推荐(0)
摘要:@interface Person : NSObject+ (void)test1;- (void)test2;@end // 根据.h文件中定义的Person类和方法 执行完这行代码 在内存中如下 Person *person = [[Person alloc] init];SEL就是对方法的一种包装。包装的SEL类型数据它对应相应的方法地址,找到方法地址就可以调用方法1.方法的存储位置在内存中每个类的方法都存储在类对象中每个方法都有一个与之对应的SEL类型的数据根据一个SEL数据就可以找到对应的方法地址,进而调用方法SEL类型的定义: typedef struct objc_s... 阅读全文
posted @ 2014-03-08 01:11 谦默 阅读(3160) 评论(1) 推荐(0)
摘要:1.description方法是NSObject自带的方法,包括类方法和对象方法+ (NSString *)description; // 默认返回 类名- (NSString *)description; // 默认返回 2.默认情况下利用NSLog和%@输出对象的时返回的就是类名和内存地址3.修改NSLog和%@的默认输出:重写类对象或者实例对象的description方法即可。因为NSLog函数进行打印的时候会自动调用description方法/******************************** Person.h文件***************************** 阅读全文
posted @ 2014-03-07 19:21 谦默 阅读(4564) 评论(0) 推荐(0)
摘要:1.类也是个对象类是一个对象是Class类型的对象简称类对象Class类型的定义// 一个任意的类型,表示一个Objective-C类typedef struct objc_class *Class;类名就代表着类对象,每个类只有一个类对象获取类对象 // 获取类对象两种方式person1 和 person2 Class person1 = [Person class]; Person *p = [Person new]; Class person2 = [p class]; // 类对象调用类方法 Person *person3 =... 阅读全文
posted @ 2014-03-07 13:46 谦默 阅读(744) 评论(0) 推荐(0)
摘要:/******************* NSString+NumCount.h文件 ******************************/#import @interface NSString (NumCount)// 给NSString类扩充一个类方法计算字符串中数字的个数+ (int)numberOfString:(NSString *)str;// 给NSString类扩充一个对象方法计算字符串中数字的个数- (int)numberCount;@end/******************* NSString+NumCount.m文件 ********************* 阅读全文
posted @ 2014-03-06 18:18 谦默 阅读(265) 评论(0) 推荐(0)
摘要:转自:http://blog.csdn.net/duxinfeng2010/article/details/7606261先说说NSInteger 与 NSUInteger,在看书上代码是遇见NSInteger和NSUInteger,不知道什么时候用NSInteger,什么时候用NSUInteger,在网上搜了一下,NSUInteger是无符号的整型, NSInteger是有符号的整型,在表视图应用中常见 NSUInteger row= [indexPath row];因为这是显示tableViewCell有多少个,只能是非零整数的,也就是说,NSUInteger常用于索引值;int与 NSI 阅读全文
posted @ 2014-03-06 18:03 谦默 阅读(615) 评论(0) 推荐(0)
摘要:1.需求:如果对一个类在不更改代码的基础上要为它再扩充额外的方法可以使用继承和分类2.分类作用:可以在不修改原来类代码的基础上,给某一个类扩充一些对象方法或者类方法,因此一个类可以有多个分类实现:分类也是类因此也有声明和实现,分类一般以要实现的功能或者模块命名声明:@interface 类名(分类名称)@end实现:@implementation 类名(分类名称)@end 3.注意(1)在分类只能增加方法,不能增加成员变量,如果要增加成员变量的话该考虑用继承去实现(2)在分类实现方法中可以访问类中的成员变量但是不能访问类中的属性@property(3)在分类中可以重新实现原类中的方法,但会将原 阅读全文
posted @ 2014-03-06 14:14 谦默 阅读(951) 评论(0) 推荐(1)
摘要:构造方法:用于在对象创建出来的时候为对象的成员变量或者属性赋值1.构造方法就是初始化对象的方法,它属于对象方法。构造方法分为系统自带和自定义构造方法。 如何创建自定义构造方法:属于对象方法那么以-号开头返回值一般为id类型方法名一般以init开头2.实现方式(1)如果是系统自带的构造方法,需要重写父类中自带的构造方法 比如init(2)如果是自定义构造方法,需要自己去实现 init: 注意:无论是哪种形式的构造方法,在实现构造方法的时候都需要先调用父类的构造方法 。构造方法在执行的时候先调用父类的方法,再执行子类的方法,如果 有多个继承会一层一层的向上找父类方法,将父类方法执行完后再一... 阅读全文
posted @ 2014-03-05 03:05 谦默 阅读(2140) 评论(0) 推荐(0)
摘要:/** 注意:由@property声明的属性 在类方法中通过下划线是获取不到的 必须是通过 对象名.属性 才能获取到!~ @property和@synthesize关键字是针对成员变量以及get/set方法而言的 从Xcode4.4以后@property已经独揽了@synthesize的功能主要有三个作用: (1)生成了成员变量get/set方法的声明 (2)生成了私有的带下划线的的成员变量因此子类不可以直接访问,但是可以通过get/set方法访问。那么如果想让定义的成员变量让子类直接访问那么只能在.h文件中定义成员 变量了,因为它默认是@protected (3)生成了get/s... 阅读全文
posted @ 2014-03-02 05:20 谦默 阅读(9934) 评论(0) 推荐(0)
摘要:/* 成员变量的作用范围: @public:在任何地方都能直接访问对象的成员变量 @private:只能在当前类的对象方法中直接访问,如果子类要访问需要调用父类的get/set方法 @protected:可以在当前类及其子类对象方法中直接访问(系统默认下是用它来修饰的) @package:在同一个包下就可以直接访问,比如说在同一个框架注意: 无论父类是在@interface还是@implementation声明的成员变量子类都能拥有;但是子类能不能直接通过变量名来访问父类中定义的成员变量是需要看父类中定义的成员变量是由什么修饰符来修饰的。 默认:在@implementation... 阅读全文
posted @ 2014-03-01 20:43 谦默 阅读(1400) 评论(0) 推荐(0)