OC
Jymn_Chen
这个作者很懒,什么都没留下…
展开
-
@dynamic关键字
@dynamic这个关键词,通常是用不到的。它与@synthesize的区别在于:使用@synthesize编译器会确实的产生getter和setter方法,而@dynamic仅仅是告诉编译器这两个方法在运行期会有的,无需产生警告。假设有这么个场景,B类,C类分别继承A类,A类实现某个协议(@protocol),协议中某个属性( somePropety )我不想在A中实现,转载 2013-08-26 13:17:22 · 4097 阅读 · 0 评论 -
Effective OC 2.0读书笔记 第7条:在对象内部尽量直接访问实例变量
Effective OC 2.0是一本非常赞的书,如果让我评分,我绝对给10分。之前读了一遍Effective OC 2.0这本书,现在的想法是将里面的建议实践到工程中,同时将一些使用心得总结成博客。本文说的是第7条:在对象内部尽量直接访问实例变量原创 2014-05-04 22:39:08 · 2542 阅读 · 0 评论 -
Objective-C: difference between id and void *
void * means "a reference to some random chunk o' memory with untyped/unknown contents"id means "a reference to some random Objective-C object of unknown class"There are additional semanti转载 2014-05-22 22:39:27 · 954 阅读 · 0 评论 -
objc@interface的设计:隐藏继承关系中的私有接口
隐藏继承关系中的私有接口感谢@像条狗在飞在留言中提出的问题,问题大概可以总结为:当子类需要使用父类的一个私有属性(方法)时,需要把这个属性(方法)放到父类的header中,但暴露给子类的同时暴露给了外部调用者,如何解决?我的方案是:建立一个私有header,使用类扩展定义父类需要暴露给子类的属性(方法),然后在各自的.m文件中引用,如:有Father类和Son类,继承关系,转载 2014-06-11 22:50:22 · 1676 阅读 · 0 评论 -
ARC对for-in语句的处理
为了加快 for in 语句的效率, 启用了ARC的编译器不会在下面句子中 retain objfor (NSObject *obj in array) { … }转载 2014-06-13 02:48:43 · 1042 阅读 · 0 评论 -
OC Runtime Fish(1)
新建一个终端工程,xi原创 2014-06-11 21:06:19 · 905 阅读 · 0 评论 -
OC初始化中new和alloc init的区别
在object-c基础教程这本书里老是可以看见类似下面这种代码,我这小菜鸟就纳闷了,啥区别啊,看上去都一样么。网上找了找,找到一些说法,这里先摘出来。 className* object = [className new];or className* object = [[className alloc] init];背景说明,new是较为老式的写法,后来发现只有一转载 2014-07-14 16:06:43 · 6422 阅读 · 0 评论 -
NSString和std::string互相转换
How do I convert a NSString into a std::string?NSString *foo = @"Foo";std::string *bar = new std::string([foo UTF8String]);转载 2014-07-15 17:24:25 · 11572 阅读 · 0 评论 -
The difference between declaring a variable “id” and “NSObject *”
Ask: In Objective-C, what's the difference between declaring a variable id versus declaring it NSObject *?Answer:转载 2014-07-24 21:54:32 · 1258 阅读 · 0 评论 -
消除warning:PerformSelector may cause a leak because its selector is unknown
This is a warning generated by the compiler because -Wundeclared-selector was used while compiling and automatic reference counting (ARC) is enabled. This can be, in general, safely ignored, as it's转载 2014-07-24 21:25:44 · 7957 阅读 · 0 评论 -
.m文件导入C++头文件带来的错误
.m文件导入C++头文件带来编译错误,解决方法:将引用C++头文件的.m文件后缀修改为.mm。原创 2014-07-30 22:20:13 · 2735 阅读 · 0 评论 -
NSLog的宏定义改进版本
//A better version of NSLog#define NSLog(format, ...) do { \fprintf(stderr, " %s\n", \[[[NSString stringWithUTF转载 2014-02-22 13:31:28 · 1434 阅读 · 0 评论 -
复制对象(一)copy和mutableCopy方法
1.调用copy和mutablecopy方法复制Foundation对象2.深复制和浅复制原创 2014-02-01 01:00:24 · 2941 阅读 · 0 评论 -
#pragma mark的意义和作用
经常在 Xcode IDE 里面的代码中看到以下代码指令:#pragma mark -#pragma mark Initialization#pragma 是什么从技术上讲,以 #pragma 开头的代码是一条编译器指令,是一个特定于程序或编译器的指令。它们不一定适用于其它编译器或其它环境。如果编译器不能识别该指令,则会将其忽略。作用它们告诉Xc转载 2013-08-22 10:38:44 · 8713 阅读 · 0 评论 -
nil,Nil和NULL的分别
nil -> Null-pointer to objective- c object NIL -> Null-pointer to objective- c class null-> null pointer to primitive type or absence of data. 例如:NSURL *url = nil;Class class = Nil; int *p原创 2013-09-05 16:34:12 · 2328 阅读 · 0 评论 -
CGRectInset的使用
在IntroduceToTextKitDemo中,在添加textView视图时使用了CGRectInset来定义其框架:CGRect newTextViewRect = CGRectInset(self.view.bounds, 8., 0.);UITextView *newTextView = [[UITextView alloc] initWithFrame:newTextViewRec原创 2013-08-10 13:58:25 · 3253 阅读 · 0 评论 -
复制对象(二)<NSCopying>协议和属性的copy特性
通过实现<NSCopying>协议实现自定义类对象的复制。分析和区别属性的strong和copy特性。原创 2014-02-01 01:15:16 · 2471 阅读 · 0 评论 -
OC基本功(二)使用宏在程序中加入测试代码
#define TEST 1@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad{ [super viewDidLoad];#if 1#undef TEST#endif #ifdef TEST NSLog(@"Testing");#els原创 2014-01-26 23:58:06 · 2078 阅读 · 0 评论 -
OC基本功(四)使用const修饰变量
用const修饰的变量表示变量值只读。static有两个作用:指定变量的作用域和存储的方式。两者结合可以设置作用域确定并且只读的变量,例如文件中的全局常量。原创 2014-02-02 21:20:16 · 6138 阅读 · 0 评论 -
复制对象(三)属性的copy特性(续)
使用copy特性修饰属性NSString和NSArray,和使用strong, weak, retain修饰属性的分别。原创 2014-02-01 21:30:19 · 1419 阅读 · 0 评论 -
OC基本功(一)使用@class和#import的细节问题
在编程过程中你可能没有注意到的使用@class和#import的细节问题。原创 2013-09-17 21:22:17 · 5442 阅读 · 0 评论 -
OC基本功(三)使用枚举
1.声明枚举类型Direction#import // 声明枚举类型enum Direction {up, down, left = 10, right};int main(int argc, const char * argv[])其中up = 0, down = 1, left = 10, right = 11。2.声明Direction变量d原创 2014-02-02 13:33:35 · 5732 阅读 · 0 评论 -
iOS 使用Method Swizzling隐藏Status Bar
iOS 7的某些场合会造成无法隐藏Status Bar的问题。例如在ParentViewController中Add一个ChildViewController,如果ParentViewController的prefersStatusBarHidden方法返回的是NO,那么即使ChildViewController中的prefersStatusBarHidden方法返回的是YES并调用刷新状态栏的代码,也无法隐藏Status Bar。解决方案:Method Swizzling原创 2014-09-30 23:51:15 · 3051 阅读 · 0 评论