|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
照着书上的例子,一个一个做下来,只要不是文盲,就都会的呀,没有体现我的一点点个人价值。所以我决定了,不能再这样下去类簇(classcluster)是一种计划形式,在FoundationFramework中被普遍利用,举个复杂的例子- NSArray*arr=[NSArrayarrayWithObjects:@"foo",@"bar",nil];NSLog(@"arrclass:%@",[arrclass]);//output:__NSArrayI
复制代码 明显__NSArrayI是一个公有类,来看看这个类的头文件- @interface__NSArrayI:NSArray{unsignedint_used;}//...
复制代码 能够看出__NSArrayI承继了NSArray。为何要这么计划呢?拿NSNumber来举个例子,我们都晓得NSNumber能够存储多品种型的数字,如Int/Float/Double等等,一种体例是把NSNumber作为基类,然后分离往完成各自的子类,像如许:
初看起来也没甚么成绩,但假如子类良多,像如许:
这对利用者来讲明显不敷便利,得记着这么多类。假如利用类簇,成绩就变得复杂了,把Number作为笼统基类,子类各自完成存取体例,然后在基类中界说多个初始化体例,像如许:
如今只必要记着一个类就能够了。NSNumber的初始化伪代码也许像如许:- -(id)initWithBool{return[[__NSCFBooleanalloc]init];}-(id)initWithLong{return[[__NSCFNumberalloc]init];}//...
复制代码 在iOS项目中的使用
在开辟app时常常会碰到体现和举动完整一样,但数据源纷歧样的情形。以花瓣app为例,一样是瀑布流,大概来自我喜好的图片、某个画板下的图片、某个用户的图片等等。假如为每种体现体例都新建一个Controller,而且利用这个Controller来初始化,那末就会碰到最入手下手提到的成绩:子类太多,利用方便。这恰好能够经由过程类簇来很便利地弄定。好比如许:- @implementationHBWaterfallViewController-(id)initWithLiked{return[[HBLikedViewControlleralloc]init];}-(id)initWithBoardID:(NSInteger)boardID{return[[HBBoardViewControlleralloc]initWithBoardID:boardID];}#pragmamark-通用的办法-(PSUICollectionViewCell*)collectionView:(PSUICollectionView*)collectionViewcellForItemAtIndexPath:(NSIndexPath*)indexPath{//...}//...#pragmamark-每一个子类必要完成的办法-(void)fetchMoreData{NSAssert(NO,@"子类必要完成此办法");}
复制代码 利用起来相似如许[[HBWaterfallViewControlleralloc]initWithBoardID:9527]或[[HBWaterfallViewControlleralloc]initWithLiked]。假如有新的DataSource,新加一个初始化办法便可,关于利用者来讲,翻开头文件,看下init开首的办法就好了。
只能IB识别IB也没那么高深XIB文件解开之后就是一堆代码之前面过一家小公司看我当时写的程序里面用到了IB一脸不屑 |
|