注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

IOS & JAVA KEY

(iMilo)

 
 
 

日志

 
 
关于我

All the splendor in the world is not worth a good friend!! Hello my friend!!

网易考拉推荐

iOS-objc文件内部的常量与类的加载  

2011-05-22 09:39:00|  分类: IOS |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

在在objc项目中使用常量的最佳实践中的常量,是指可用于全局的常量。如果只是在文件内部使用,不希望之外的地方能访问到,就需要:

 

#import "BasicDemosViewController.h"

#import "Constants.h"

 

NSString * const kMyURL=@"http://marshal.easymorse.com";

 

@implementation BasicDemosViewController

 

- (void)loadView

{

     NSLog(@"load view: %@, %@",kInitURL,kMyURL);

}

 

类的加载

java语言里,可以通过如下代码来实现加载类的时候执行对类的操作,一般叫:类初始块,或者,类加载块。比如:

 

public class MyClass

{

static

{

         ……

}

}

objc语言里,对应的机制是,类方法,loadinitialize

 

比如:

 

#import "Constants.h"

 

@implementation Constants

 

+ (void)initialize

{

NSLog(@"init constants >>>>>>>>>>");

}

 

+ (void)load

{

NSLog(@"load constants >>>>>>>>>>");

}

 

@end

两个方法有一些不同。

 

load,是加载类的时候,这里是Constants类,就会调用。也就是说,ios应用启动的时候,就会加载所有的类,就会调用这个方法。

 

这样有个缺点,当加载类需要很昂贵的资源,或者比较耗时的时候,可能造成不良的用户体验,或者系统的抖动。这时候,就要考虑initialize方法了。这个方法可看作类加载的延时加载方法。类加载后并不执行该方法。只有当实例化该类的实例的时候,才会在第一个实例加载前执行该方法。比如:

[Constants alloc];

 

alloc将为Constants实例在堆上分配变量。这时调用一次initialize方法,而且仅调用一次,也就是说再次alloc操作的时候,不会再调用initialize方法了。

 

转载至:iOS-objc文件内部的常量与类的加载

 

可参考这篇文章:

http://www.mikeash.com/pyblog/friday-qa-2009-05-22-objective-c-class-loading-and-initialization.html

 

 

  评论这张
 
阅读(957)| 评论(1)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017