随笔分类 -  Objective-C

摘要:Objective-C是动态语言,每个类class都会在运行时创建一个类对象。NSObject是根类,当然是最重要的一个类,提供的一些公共方法,顾名思议。@protocol NSObject// 是否引用同一对象- (BOOL)isEqual:(id)object;- (NSUInteger)hash;- (Class)superclass;- (Class)class;- (id)self;- (NSZone *)zone NS_AUTOMATED_REFCOUNT_UNAVAILABLE;- (id)performSelector:(SEL)aSelector;- (id)performS 阅读全文
posted @ 2013-08-12 09:58 万有引用 阅读(793) 评论(0) 推荐(0)
摘要:Bundle是Cocoa 应用程序中资源的组织方法,它是一个以.bundle为扩展名的文件夹,Cocoa 提供了对它操作的方法。@interface NSBundle : NSObject {@private NSUInteger _flags; id _cfBundle; NSUInteger _reserved2; Class _principalClass; id _tmp1; id _tmp2; void ... 阅读全文
posted @ 2013-08-12 09:46 万有引用 阅读(1041) 评论(0) 推荐(0)
摘要:Cocoa中,通知中心实现的观察者设计模式。通过下面两个类实现通知的发送和接收。/**************** Notifications ****************/@interface NSNotification : NSObject - (NSString *)name;- (id)object; // 发送该通知的对象- (NSDictionary *)userInfo; // 额外的可选信息@end@interface NSNotification (NSNotificationCreation)+ (id)notificationWithName:(NSSt... 阅读全文
posted @ 2013-08-12 09:30 万有引用 阅读(433) 评论(0) 推荐(0)
摘要:Objective-C的对象都是动态创建的,Cocoa 采用了引用计数的技术进行对象生存周期的管理,对象新创建时引用计数为1,发送remain消息后对象引用计数+1,发送release消息后对象引用计数-1,当对象引用计数为0时,Objective-C运行会向对象发送dealloc消息进行销毁对象回收内存。注意:自己可以重写dealloc方法,但不要自己调用它。Objective-C提供了三种内存管理方式:manual retain-release(MRR,手动管理),automatic reference counting(ARC,自动引用计数),garbage collection(垃圾回 阅读全文
posted @ 2013-08-09 16:35 万有引用 阅读(340) 评论(0) 推荐(0)
摘要:NSMutableArray *someObject = [NSMutableArray array];NSLog(@"%s:%d someObject=%@", __func__, __LINE__, someObject);[someObject addObject:@"foo"];NSLog(@"%s:%d someObject=%@", __func__, __LINE__, someObject); Table 1Preprocessor macros and for logging in C/C++/Objective-C 阅读全文
posted @ 2013-08-09 15:41 万有引用 阅读(228) 评论(0) 推荐(0)
摘要:Objective-C提供了几种常用的数据保存方案属性列表对象序列化和反序列化SQLiteCore Data属性列表plist中可存储的类型:NSArray, NSDictionary, NSString, NSData, NSDate, NSNumber,最常用的根类型是NSArray,NSDictionary这些类提供了读和写的方法, 同样提供的工厂方法- (id) initWithContentsOfFile : (NSString *) filePath;- (void) writeToFile: (NSString *) filePath atomically: ... 阅读全文
posted @ 2013-08-09 10:47 万有引用 阅读(324) 评论(0) 推荐(0)
摘要:谓词定义了真值条件,对象通过谓词进行筛选,判断是否与条件相匹配。@interface NSPredicate : NSObject { void *_reserved;}// Parse predicateFormat and return an appropriate predicate+ (NSPredicate *)predicateWithFormat:(NSString *)predicateFormat argumentArray:(NSArray *)arguments;+ (NSPredicate *)predicateWithFormat:(NSString *)pr... 阅读全文
posted @ 2013-08-09 10:14 万有引用 阅读(1745) 评论(0) 推荐(0)
摘要:KVC提供了以字符串的方式访问对象的数据,由于要解析字符串,所以性能有损耗- (id) valueForKey: (NSString *) key;- (void) setValue: (id) value forKey: (NSString *) key;- (id) valueForKeyPath: (NSString *) keyPath;- (void) SetValue: (id) value forKeyPath: (NSString *) keyPath;Objective-C在运行时使用元数据进入对象查找相关的信息,valueForKey:首先,查找以-key或isKey命名的 阅读全文
posted @ 2013-08-09 09:46 万有引用 阅读(288) 评论(0) 推荐(0)
摘要:类名必须是唯一的Objective-C中没有提供命名空间,所以公开的类一般都添加了前缀来避免类名的冲突PrefixFrameworkNSFoundation (OS X and iOS) and Application Kit (OS X)UIUIKit (iOS)ABAddress BookCACore AnimationCICore Image自定义的类应该使用三字母前缀对象创建约定NSMutableArray *array = [[NSMutableArray alloc] init];NSMutableArray *array = [NSMutableArray new];NSMuta 阅读全文
posted @ 2013-08-09 09:06 万有引用 阅读(263) 评论(0) 推荐(0)
摘要:大多数错误都可以用NSError来进行描述- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error;有时候是按引用传递NSError的- (BOOL)writeToURL:(NSURL *)aURL options:(NSDataWritingOptions)mask error:(NSError **)errorPtr; NSError *anyError; BOOL success = [receivedData writeTo... 阅读全文
posted @ 2013-08-09 08:54 万有引用 阅读(327) 评论(0) 推荐(0)
摘要:块对象相当于C#中的匿名委托,是对一段代码的引用,@selector相当于C#中的委托,是对方法的引用。创建块对象 ^{ NSLog(@"This is a block"); }声明块变量 void (^simpleBlock)(void);变量赋值 simpleBlock = ^{ NSLog(@"This is a block"); };一起写的语法 void (^simpleBlock)(void) = ^{ NSLog(@"This is a block"); };对块对象的调用 simpleBlock(... 阅读全文
posted @ 2013-08-08 17:17 万有引用 阅读(265) 评论(0) 推荐(0)
摘要:协议是对象行为的抽象,定义了消息合约。Objective-C中可以实现多个协议@protocol XYZPieChartViewDataSource- (NSUInteger)numberOfSegments;- (CGFloat)sizeOfSegmentAtIndex:(NSUInteger)segmentIndex;@optional- (NSString *)titleForSegmentAtIndex:(NSUInteger)segmentIndex;- (BOOL)shouldExplodeSegmentAtIndex:(NSUInteger)segmentIndex;@requi 阅读全文
posted @ 2013-08-08 16:16 万有引用 阅读(211) 评论(0) 推荐(1)
摘要:类别类似于C#中的扩展方法,是对现在类进行行为的扩展,它不能进行数据扩展,也就是不能定义字段和属性;定义:#import "XYZPerson.h" @interface XYZPerson (XYZPersonNameDisplayAdditions)- (NSString *)lastNameFirstNameString;@end实现:#import "XYZPerson+XYZPersonNameDisplayAdditions.h" @implementation XYZPerson (XYZPersonNameDisplayAdditions 阅读全文
posted @ 2013-08-08 16:04 万有引用 阅读(203) 评论(0) 推荐(0)
摘要:对象的数据是类内定义的字段,属性是对字段的封装,编译器会自动为属性生成相应的字段及读取方法。传统的定义方法@interface XYZPerson : NSObject{ @private NSString *_firstName; NSString *_name; float: _height;}- (NSString *) firstName;- (void) setFirstName : (NSString *) firstName;- (float) height;- (void) setHeight: (float) height;@end用属性的定义方法@i... 阅读全文
posted @ 2013-08-08 15:47 万有引用 阅读(213) 评论(0) 推荐(0)
摘要:对象发送和接收消息 [someObject doSomething];someObject是接收者,doSomething是消息用指针跟踪对象值类型:NSInteger,int,float,double,char,BOOL,变量直接存储了它的值- (void)myMethod { int someInteger = 42; NSString *name = @"Bob";}@property float height;@property (copy) NSString *firstName;作为类的成员(字段,属性,上例中的height),它是作为对象的一部分分配到heap 阅读全文
posted @ 2013-08-08 11:19 万有引用 阅读(233) 评论(0) 推荐(0)
摘要:Objective-C的定义分为两部分,声明部分在以扩展名为.h的文件中,实现部分在以.m为扩展名的文件中。类的成员包括:字段(现在基本上都使用属性了)、属性、实例方法和类方法。根类为NSObject。Objective-C中的类会在运行时创建为Class的实例声明部分@interface XYZPerson : NSObject // 带存储特性属性@property (nonatomic, copy)NSString *firstName;// 只读属性@property (readonly,copy)NSString *lastName;// 值类型属性@property float h 阅读全文
posted @ 2013-08-07 11:05 万有引用 阅读(203) 评论(0) 推荐(0)
摘要:#import int main (int argc, const char *argv[]) { NSLog("%@", @"Hello Objective C"); return (0); }Objective-C是C的超集,C的特性都可以在objective c中使用以#开头的命令为预编译命令以@开头的命令为objective c专用的关键字#import 命令用于包含其它源码文件,它会对同一文件的多次包含进行智能的处理,确保只包含一次。后面跟是用于包含系统或其它框架的文件,跟" "是用于包含自己的源码文件。由于objectiv 阅读全文
posted @ 2013-08-06 17:14 万有引用 阅读(215) 评论(0) 推荐(0)