本文转载至 http://www.apkbus.com/android-126129-1-1.html

   

该用户从未签到

156

主题

156

帖子

1826

积分

Android子爵

积分
1826
电梯直达

楼主

 
 发表于 2013-7-16 14:26:31 | 只看该作者 
上篇,我们讲了UISignal的工作原理,以及BeeUIButton中的一些用法,实际上,BeeFramework框架为大部分常用组件封装了UISignal,在应用中只需要对Signal进行处理就好了,这在一定程度上减轻了代码量。

在实际应用中UITableView的场景可谓是无处不在,下面的例子实现了一个UITableViewCell的自定义UISignal。先看下效果图 
       <ignore_js_op> 
      点击浏览或评论触发相应事件,为了响应这样的事件,通常的做法是在UITableViewCell中采用代理的方式,在ViewController中实现Cell的协议。 
      下面看下Bee的写法

  1. //
  2. //  ViewController.h
  3. //  BeeFrameWorkTest
  4. //
  5. //  Created by he songhang on 13-6-3.
  6. //  Copyright (c) 2013年 he songhang. All rights reserved.
  7. //
  8. #import <UIKit/UIKit.h>
  9. #import <BeeFramework/Bee.h>
  10. @interface MyCell : UITableViewCell{
  11. UILabel *lb_content;
  12. UIButton *btn_count;
  13. UIButton *btn_comment;
  14. }
  15. @property(nonatomic,retain) NSDictionary *data;
  16. AS_SIGNAL(COUNT)
  17. AS_SIGNAL(COMMENT)
  18. @end
  19. @interface ViewController : UITableViewController
  20. @end

复制代码

点击浏览或评论触发相应事件,为了响应这样的事件,通常的做法是在UITableViewCell中采用代理的方式,在ViewController中实现Cell的协议。 
      下面看下Bee的写法

  1. //
  2. //  ViewController.h
  3. //  BeeFrameWorkTest
  4. //
  5. //  Created by he songhang on 13-6-3.
  6. //  Copyright (c) 2013年 he songhang. All rights reserved.
  7. //
  8. #import <UIKit/UIKit.h>
  9. #import <BeeFramework/Bee.h>
  10. @interface MyCell : UITableViewCell{
  11. UILabel *lb_content;
  12. UIButton *btn_count;
  13. UIButton *btn_comment;
  14. }
  15. @property(nonatomic,retain) NSDictionary *data;
  16. AS_SIGNAL(COUNT)
  17. AS_SIGNAL(COMMENT)
  18. @end
  19. @interface ViewController : UITableViewController
  20. @end

复制代码

  1. //
  2. //  ViewController.m
  3. //  BeeFrameWorkTest
  4. //
  5. //  Created by he songhang on 13-6-3.
  6. //  Copyright (c) 2013年 he songhang. All rights reserved.
  7. //
  8. #import "ViewController.h"
  9. @implementation MyCell
  10. DEF_SIGNAL(COUNT)
  11. DEF_SIGNAL(COMMENT)
  12. - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{
  13. self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
  14. lb_content = [[UILabel alloc]init];
  15. btn_count = [[UIButton alloc]init];
  16. btn_comment = [[UIButton alloc]init];
  17. [btn_count addTarget:self action:@selector(countBtnClicked) forControlEvents:UIControlEventTouchUpInside];
  18. [btn_comment addTarget:self action:@selector(commentBtnClicked) forControlEvents:UIControlEventTouchUpInside];
  19. [btn_count setTitleColor:[UIColor grayColor] forState:UIControlStateNormal];
  20. btn_count.titleLabel.font = [UIFont systemFontOfSize:12];
  21. [btn_comment setTitleColor:[UIColor grayColor] forState:UIControlStateNormal];
  22. btn_comment.titleLabel.font = [UIFont systemFontOfSize:12];
  23. [self.contentView addSubview:lb_content];
  24. [self.contentView addSubview:btn_comment];
  25. [self.contentView addSubview:btn_count];
  26. return self;
  27. }
  28. -(void)layoutSubviews{
  29. lb_content.frame = CGRectMake(10, 0, 300, 44);
  30. btn_count.frame = CGRectMake(200, 20, 50, 14);
  31. btn_comment.frame = CGRectMake(260, 20, 50, 14);
  32. }
  33. -(void)setData:(NSDictionary *)data{
  34. _data = data;
  35. if (data) {
  36. lb_content.text = [data stringAtPath:@"content"];
  37. [btn_count setTitle:[NSString stringWithFormat:@"浏览(%@)",[data stringAtPath:@"count"]] forState:UIControlStateNormal];
  38. [btn_comment setTitle:[NSString stringWithFormat:@"评论(%@)",[data stringAtPath:@"comment"]] forState:UIControlStateNormal];
  39. }else{
  40. lb_content.text = nil;
  41. [btn_count setTitle:nil forState:UIControlStateNormal];
  42. [btn_comment setTitle:nil forState:UIControlStateNormal];
  43. }
  44. }
  45. -(void)countBtnClicked{
  46. [self sendUISignal:MyCell.COUNT withObject:self.data];
  47. }
  48. -(void)commentBtnClicked{
  49. [self sendUISignal:MyCell.COMMENT withObject:self.data];
  50. }
  51. @end
  52. @interface ViewController (){
  53. NSArray *datas;
  54. }
  55. @end
  56. @implementation ViewController
  57. -(void)handleUISignal_MyCell:(BeeUISignal *)signal{
  58. if ([signal is:MyCell.COUNT]) {
  59. NSDictionary *dict = (NSDictionary *)signal.object;
  60. CC(@"%@被点击",[dict stringAtPath:@"content"]);
  61. }else if ([signal is:MyCell.COMMENT]){
  62. NSDictionary *dict = (NSDictionary *)signal.object;
  63. CC(@"%@被评论",[dict stringAtPath:@"content"]);
  64. }
  65. }
  66. - (id)initWithStyle:(UITableViewStyle)style
  67. {
  68. self = [super initWithStyle:style];
  69. if (self) {
  70. // Custom initialization
  71. }
  72. return self;
  73. }
  74. - (void)viewDidLoad
  75. {
  76. [super viewDidLoad];
  77. NSDictionary *dict1 = [NSDictionary dictionaryWithObjectsAndKeys:@"测试数据1",@"content",@"20",@"count",@"3",@"comment", nil];
  78. NSDictionary *dict2 = [NSDictionary dictionaryWithObjectsAndKeys:@"测试数据2",@"content",@"30",@"count",@"4",@"comment", nil];
  79. NSDictionary *dict3 = [NSDictionary dictionaryWithObjectsAndKeys:@"测试数据3",@"content",@"10",@"count",@"2",@"comment", nil];
  80. datas = [[NSArray alloc]initWithObjects:dict1,dict2,dict3, nil];
  81. // Do any additional setup after loading the view, typically from a nib.
  82. }
  83. - (void)didReceiveMemoryWarning
  84. {
  85. [super didReceiveMemoryWarning];
  86. // Dispose of any resources that can be recreated.
  87. }
  88. #pragma mark -UITableViewDataSource
  89. - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;{
  90. return [datas count];
  91. }
  92. - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;{
  93. MyCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MYCELL"];
  94. if (!cell) {
  95. cell = [[MyCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"MYCELL"];
  96. }
  97. cell.data = [datas objectAtIndex:indexPath.row];
  98. return cell;
  99. }
  100. @end

复制代码

在MYCell.h中通过AS_SIGNAL定义了两个静态的属性,用来自定义UISinal的名字,MYCell.m中的DEF_SIGNAL与.h中相对应。事实上,在Bee中还有很多这样类型的预定义方法,如:AS_MESSAGE 、AS_NOTIFICATION ,通过这些预定义方法,在一定程度上范规了方法的命名,通过这些预定义的属性就能知道对应的接口的调用方式。 
    在Cell中通过调用 [self sendUISignal:XXX withObject:self.data]实现了信号的传递过程。在ViewController实现规范命名的方法(见上篇),就能对信号进行响应。

实际上Bee已经为我们提供了一个方便布局的BeeUIGirdCell,它预定义了常见的一些方法,如数据的绑定,界面的布局等等。Bee中的BeeUITableBoard、BeeUIFlowBoard都采用GirdCell来定义布局,这里我们通过category为UITableView扩展使用BeeUIGirdCell的方法。

  1. //
  2. //  UITableView+BeeUIGirdCell.h
  3. //
  4. //  Created by he songhang on 13-4-24.
  5. //  Copyright (c) 2013年 he songhang. All rights reserved.
  6. //
  7. #if (TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR)
  8. #import <Foundation/Foundation.h>
  9. #import "Bee_UIGridCell.h"
  10. @interface UITableViewCell (BeeUIGirdCell)
  11. @property(nonatomic,retain) BeeUIGridCell *gridCell;
  12. @end
  13. @interface UITableView (BeeUIGirdCell)
  14. -(UITableViewCell *) dequeueReusableCellWithBeeUIGirdCellClass:(Class) class;
  15. @end
  16. #endif

复制代码

  1. //
  2. //  UITableView+BeeUIGirdCell.m
  3. //  618
  4. //
  5. //  Created by he songhang on 13-4-24.
  6. //  Copyright (c) 2013年 he songhang. All rights reserved.
  7. //
  8. #import "UITableView+BeeUIGirdCell.h"
  9. #import "CGRect+BeeExtension.h"
  10. #import "Bee_Precompile.h"
  11. #include <objc/runtime.h>
  12. #import "Bee_Runtime.h"
  13. @implementation UITableViewCell(BeeUIGirdCell)
  14. @dynamic gridCell;
  15. - (void)setFrame:(CGRect)rc
  16. {
  17. [super setFrame:CGRectZeroNan(rc)];
  18. [self.gridCell setFrame:self.bounds];
  19. //        [_gridCell layoutSubcells];
  20. }
  21. - (void)setCenter:(CGPoint)pt
  22. {
  23. [super setCenter:pt];
  24. [self.gridCell setFrame:self.bounds];
  25. //        [_gridCell layoutSubcells];
  26. }
  27. -(void)setGridCell:(BeeUIGridCell *)gridCell{
  28. if (!self.gridCell) {
  29. objc_setAssociatedObject( self, "UITableViewCell.gridCell", gridCell, OBJC_ASSOCIATION_RETAIN );
  30. //        self.gridCell.autoresizesSubviews = YES;
  31. //        self.gridCell.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight;
  32. if ( gridCell.superview != self.contentView )
  33. {
  34. [gridCell.superview removeFromSuperview];
  35. }
  36. [self.contentView addSubview:gridCell];
  37. }else{
  38. if ( self.gridCell != gridCell )
  39. {
  40. [self.gridCell release];
  41. objc_setAssociatedObject( self, "UITableViewCell.gridCell", gridCell, OBJC_ASSOCIATION_RETAIN );
  42. //            self.gridCell.autoresizesSubviews = YES;
  43. //            self.gridCell.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight;
  44. if ( gridCell.superview != self.contentView )
  45. {
  46. [gridCell.superview removeFromSuperview];
  47. }
  48. [self.contentView addSubview:gridCell];
  49. }
  50. }
  51. }
  52. -(BeeUIGridCell *)gridCell{
  53. NSObject * obj = objc_getAssociatedObject( self, "UITableViewCell.gridCell" );
  54. if ( obj && [obj isKindOfClass:[BeeUIGridCell class]] )
  55. return (BeeUIGridCell *)obj;
  56. return nil;
  57. }
  58. @end
  59. @implementation UITableView (BeeUIGirdCell)
  60. -(UITableViewCell *) dequeueReusableCellWithBeeUIGirdCellClass:(Class) clazz{
  61. UITableViewCell *cell = [self dequeueReusableCellWithIdentifier:[clazz description]];
  62. if (!cell) {
  63. cell = [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:[cell description]]autorelease];
  64. cell.selectionStyle = UITableViewCellSelectionStyleNone;
  65. cell.accessoryType = UITableViewCellAccessoryNone;
  66. cell.editingAccessoryType = UITableViewCellAccessoryNone;
  67. cell.showsReorderControl = NO;
  68. cell.shouldIndentWhileEditing = NO;
  69. cell.indentationLevel = 0;
  70. cell.indentationWidth = 0.0f;
  71. self.alpha = 1.0f;
  72. self.layer.masksToBounds = YES;
  73. self.layer.opaque = YES;
  74. cell.contentView.layer.masksToBounds = YES;
  75. cell.contentView.layer.opaque = YES;
  76. cell.contentView.autoresizesSubviews = YES;
  77. if ( [clazz isSubclassOfClass:[BeeUIGridCell class]] )
  78. {
  79. cell.gridCell = [(BeeUIGridCell *)[[BeeRuntime allocByClass:clazz] init] autorelease];
  80. }
  81. }
  82. return cell;
  83. }
  84. @end

复制代码

为了下次重用这两个文件,把UITableView+BeeUIGirdCell.h和UITableView+BeeUIGirdCell.m放到Pods/BeeFramework/BeeFramework/MVC/View下,并在Pods/Headers下新建UITableView+BeeUIGirdCell.h的替身,

  1. ln -s ../../BeeFramework/BeeFramework/MVC/View/UITableView+BeeUIGirdCell.h UITableView+BeeUIGirdCell.h

复制代码

我们重新实现一下ViewController

  1. //
  2. //  ViewController1.h
  3. //  BeeFrameWorkTest
  4. //
  5. //  Created by he songhang on 13-6-4.
  6. //  Copyright (c) 2013年 he songhang. All rights reserved.
  7. //
  8. #import <UIKit/UIKit.h>
  9. @interface ViewController1 : UITableViewController
  10. @end

复制代码

  1. //
  2. //  ViewController1.m
  3. //  BeeFrameWorkTest
  4. //
  5. //  Created by he songhang on 13-6-4.
  6. //  Copyright (c) 2013年 he songhang. All rights reserved.
  7. //
  8. #import "ViewController1.h"
  9. #import <BeeFramework/UITableView+BeeUIGirdCell.h>
  10. #import <BeeFramework/Bee.h>
  11. @interface MYGirdCell : BeeUIGridCell{
  12. UILabel *lb_content;
  13. UIButton *btn_count;
  14. UIButton *btn_comment;
  15. }
  16. AS_SIGNAL(COUNT)
  17. AS_SIGNAL(COMMENT)
  18. @end
  19. @implementation MYGirdCell
  20. DEF_SIGNAL(COUNT)
  21. DEF_SIGNAL(COMMENT)
  22. //初始化
  23. -(void)load{
  24. lb_content = [[UILabel alloc]init];
  25. btn_count = [[UIButton alloc]init];
  26. btn_comment = [[UIButton alloc]init];
  27. [btn_count addTarget:self action:@selector(countBtnClicked) forControlEvents:UIControlEventTouchUpInside];
  28. [btn_comment addTarget:self action:@selector(commentBtnClicked) forControlEvents:UIControlEventTouchUpInside];
  29. [btn_count setTitleColor:[UIColor grayColor] forState:UIControlStateNormal];
  30. btn_count.titleLabel.font = [UIFont systemFontOfSize:12];
  31. [btn_comment setTitleColor:[UIColor grayColor] forState:UIControlStateNormal];
  32. btn_comment.titleLabel.font = [UIFont systemFontOfSize:12];
  33. [self addSubview:lb_content];
  34. [self addSubview:btn_comment];
  35. [self addSubview:btn_count];
  36. }
  37. //释放
  38. -(void)unload{
  39. }
  40. //数据变化时
  41. - (void)dataDidChanged
  42. {
  43. if (self.cellData) {
  44. NSDictionary *data = _cellData;
  45. lb_content.text = [data stringAtPath:@"content"];
  46. [btn_count setTitle:[NSString stringWithFormat:@"浏览(%@)",[data stringAtPath:@"count"]] forState:UIControlStateNormal];
  47. [btn_comment setTitle:[NSString stringWithFormat:@"评论(%@)",[data stringAtPath:@"comment"]] forState:UIControlStateNormal];
  48. }else{
  49. lb_content.text = nil;
  50. [btn_count setTitle:nil forState:UIControlStateNormal];
  51. [btn_comment setTitle:nil forState:UIControlStateNormal];
  52. }
  53. }
  54. //用于计算高度,可实现动态高度
  55. + (CGSize)sizeInBound:(CGSize)bound forData:(NSObject *)data
  56. {
  57. return bound;
  58. }
  59. //用于布局
  60. - (void)layoutInBound:(CGSize)bound forCell:(BeeUIGridCell *)cell
  61. {
  62. lb_content.frame = CGRectMake(10, 0, 300, 44);
  63. btn_count.frame = CGRectMake(200, 20, 50, 14);
  64. btn_comment.frame = CGRectMake(260, 20, 50, 14);
  65. }
  66. -(void)countBtnClicked{
  67. [self sendUISignal:MYGirdCell.COUNT];
  68. }
  69. -(void)commentBtnClicked{
  70. [self sendUISignal:MYGirdCell.COMMENT withObject:self.cellData];
  71. }
  72. @end
  73. @interface ViewController1 (){
  74. NSArray *datas;
  75. }
  76. @end
  77. @implementation ViewController1
  78. -(void)handleUISignal_MYGirdCell:(BeeUISignal *)signal{
  79. if ([signal is:MYGirdCell.COUNT]) {
  80. MYGirdCell *cell = signal.source;
  81. NSDictionary *dict = (NSDictionary *)cell.cellData;
  82. CC(@"%@被点击",[dict stringAtPath:@"content"]);
  83. }else if ([signal is:MYGirdCell.COMMENT]){
  84. NSDictionary *dict = (NSDictionary *)signal.object;
  85. CC(@"%@被评论",[dict stringAtPath:@"content"]);
  86. }
  87. }
  88. - (id)initWithStyle:(UITableViewStyle)style
  89. {
  90. self = [super initWithStyle:style];
  91. if (self) {
  92. // Custom initialization
  93. }
  94. return self;
  95. }
  96. - (void)viewDidLoad
  97. {
  98. [super viewDidLoad];
  99. NSDictionary *dict1 = [NSDictionary dictionaryWithObjectsAndKeys:@"测试数据1",@"content",@"20",@"count",@"3",@"comment", nil];
  100. NSDictionary *dict2 = [NSDictionary dictionaryWithObjectsAndKeys:@"测试数据2",@"content",@"30",@"count",@"4",@"comment", nil];
  101. NSDictionary *dict3 = [NSDictionary dictionaryWithObjectsAndKeys:@"测试数据3",@"content",@"10",@"count",@"2",@"comment", nil];
  102. datas = [[NSArray alloc]initWithObjects:dict1,dict2,dict3, nil];
  103. // Do any additional setup after loading the view, typically from a nib.
  104. }
  105. - (void)didReceiveMemoryWarning
  106. {
  107. [super didReceiveMemoryWarning];
  108. // Dispose of any resources that can be recreated.
  109. }
  110. #pragma mark -UITableViewDataSource
  111. - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;{
  112. return [datas count];
  113. }
  114. - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;{
  115. UITableViewCell *cell = [tableView dequeueReusableCellWithBeeUIGirdCellClass:[MYGirdCell class]];
  116. cell.gridCell.cellData = [datas objectAtIndex:indexPath.row];
  117. return cell;
  118. }
  119. @end

复制代码

可以留意下MYGirdCell中的

  1. -(void)countBtnClicked{
  2. [self sendUISignal:MYGirdCell.COUNT];
  3. }
  4. -(void)commentBtnClicked{
  5. [self sendUISignal:MYGirdCell.COMMENT withObject:self.cellData];
  6. }

复制代码

对应于ViewController1中的

  1. -(void)handleUISignal_MYGirdCell:(BeeUISignal *)signal{
  2. if ([signal is:MYGirdCell.COUNT]) {
  3. MYGirdCell *cell = signal.source;
  4. NSDictionary *dict = (NSDictionary *)cell.cellData;
  5. CC(@"%@被点击",[dict stringAtPath:@"content"]);
  6. }else if ([signal is:MYGirdCell.COMMENT]){
  7. NSDictionary *dict = (NSDictionary *)signal.object;
  8. CC(@"%@被评论",[dict stringAtPath:@"content"]);
  9. }
  10. }

复制代码

本篇以UItableViewController演示了如何自定义UISignal,以及BeeUIGirdCell的用法。 
以上代码下载地址:https://github.com/ilikeido/BeeFrameworkTest/tree/master/lesson3

BeeFramework 系列二 UISignal篇下的更多相关文章

  1. BeeFramework 系列一 安装篇(Arc)

    http://ilikeido.iteye.com/blog/1881390 Beeframework 是一款iOS快速开发框架,它以UISignal强大的路由功能替代原有Delegate方式,完成复 ...

  2. web前端知识大纲:系列二 css篇

    web前端庞大而复杂的知识体系的组成:html.css和 javascript 二.css 1.CSS选择器 CSS选择器即通过某种规则来匹配相应的标签,并为其设置CSS样式,常用的有类选择器.标签选 ...

  3. redis系列二: linux下安装redis

    下面介绍在Linux环境下,Redis的安装与配置 一. 安装 1.首先上官网下载Redis 压缩包,地址:http://redis.io/download 下载稳定版3.0即可. 2.通过远程管理工 ...

  4. BeeFramework 系列

    http://ilikeido.iteye.com/category/281079 BeeFramework 系列三 MVC篇上 博客分类: Beeframework iphone开发 mvc框架Be ...

  5. SQL Server调优系列玩转篇二(如何利用汇聚联合提示(Hint)引导语句运行)

    前言 上一篇我们分析了查询Hint的用法,作为调优系列的最后一个玩转模块的第一篇.有兴趣的可以点击查看:SQL Server调优系列玩转篇(如何利用查询提示(Hint)引导语句运行) 本篇继续玩转模块 ...

  6. margin系列之内秀篇(二)

    本系列摘自  飘零雾雨的博客 可挖掘性 之前已经写过一篇关于 margin 应用场景的文章:margin系列之内秀篇,当然,它的应用场景会远大于文中所述,无法一一列举. 所以本篇权当是对此的补遗好了, ...

  7. SQL Server 调优系列玩转篇二(如何利用汇聚联合提示(Hint)引导语句运行)

    前言 上一篇我们分析了查询Hint的用法,作为调优系列的最后一个玩转模块的第一篇.有兴趣的可以点击查看:SQL Server调优系列玩转篇(如何利用查询提示(Hint)引导语句运行) 本篇继续玩转模块 ...

  8. Linux服务器部署系列之二—MySQL篇

    MySQL是linux环境中使用最广泛的数据库之一,著名的“LAMP黄金组合”就要用到MySQL.关于MySQL的优点及作用,我就不多讲了,网上很多这样的文章. 今天我们要谈的是MySQL服务器的部署 ...

  9. 手牵手,从零学习Vue源码 系列二(变化侦测篇)

    系列文章: 手牵手,从零学习Vue源码 系列一(前言-目录篇) 手牵手,从零学习Vue源码 系列二(变化侦测篇) 陆续更新中... 预计八月中旬更新完毕. 1 概述 Vue最大的特点之一就是数据驱动视 ...

随机推荐

  1. dracut 基本介绍

    dracut 维基   https://dracut.wiki.kernel.org/index.php/Main_Page  http://www.360doc.com/content/13/042 ...

  2. Netty内存池

    参考资料:http://blog.csdn.net/youaremoon/article/details/47910971 主要思想:buddy allocation,jemalloc

  3. SpringBoot第十一篇:SpringBoot+MyBatis+Thymelaf实现CRUD

    作者:追梦1819 原文:https://www.cnblogs.com/yanfei1819/p/10936304.html 版权声明:本文为博主原创文章,转载请附上博文链接! 引言   总结前面几 ...

  4. jvm 简单描述

    java零基础入门-面向对象篇(一) 基础类型和引用类型 友情提示:本章开始可能会有部分较深入的内容,不说又不行,说了又很难解释清楚,因为里面的技术细节实在太多太复杂,所以我会屏蔽部分技术细节,只展示 ...

  5. ACM的奇计淫巧_扩栈C++/G++

    C++ #pragma comment(linker, "/STACK:102400000,102400000") G++ << ; // 256MB char *p ...

  6. poj1185 [NOI2001]炮兵阵地

    http://poj.org/problem?id=1185 三维装压dp,压缩上一行状态与本行状态,枚举上两行状态转移 第一维可以滚掉,实际复杂度只枚举符合情况的情况,每行状态不会超过60并非$2^ ...

  7. git常用命令,制作缩写命令

    目录 基础命令 常用命令列表 查看状态 添加到本地仓库 推送到远程仓库 创建分支 更新分支, 合并分支 查看分支的差异 回滚 其它 缩写命令 基础命令 # 生成SSH key ssh-keygen - ...

  8. 【Todo】Python中文及Java中文问题及解决方法总结 & 及各种字符编码问题跟踪贴

    Python中文编码问题看这里吧:http://www.cnblogs.com/charlesblc/p/6159109.html Mysql中文编码问题可以看这篇:http://www.cnblog ...

  9. Andriod 自动化测试研究方向

    前言 孔子曰:"工欲善其事,必先利其器",我来云:"工欲利其器,必先知其理".我们无论学习任何新事物,都要尽量做到"知其然知其所以然",对于 ...

  10. 谈 API 的撰写 - 架构

    在 谈 API 的撰写 - 总览 里我们谈到了做一个 API 系统的基本思路和一些组件的选型,今天谈谈架构. 部署 首先要考虑的架构是部署的架构.部署的方案往往会深刻影响着系统的结构.我们需要问自己一 ...