rxjava框架: http://gank.io/post/560e15be2dca930e00da1083
作者: wudijimao
有空研究一下vector的insert操作的效率(C++)
参考:http://stackoverflow.com/questions/15009442/c-push-back-vs-insert-vs-emplace
有时候会使用std::vector<char>作为buffer,很好用,但是经常担心insert的效率,通过参考页看出insert的效率貌似是最高的了。但是注意到insert的时候并不知道插入数据的总长度,操作时会先获取总长度,需要检查这个获取长度的操作是否快。如果不快,如何能从外部直接传入插入数据的长度呢? 如果有人已经有结论了可以在评论里交流。
Android开发陷阱之Layout
http://blog.sina.com.cn/s/blog_783ede030101hsbd.html
IOS Runloop 使用
推荐一个博客:http://blog.chinaunix.net/uid-24862988-id-3411921.html
详细讲解了如何自定义任务并加入runloop中。(普通任务,MachPort。。
Windows上Opengl开发UI遇到的两个坑
一、GLEW初始化后并不支持新版的opengl函数。 原因是piexlFormart选择了支持向BitMap绘制,这样会使当前opengl环境只支持OpenGL 1.1。
顺便记录一下GLEW使用的几个注意点:
1、头文件要在最前引用 不要在其前边引用gl.h文件 会导致错误。
2、初始化要在wglCreateContext MakeCurrent之后初始化。并检查返回值是否是 GLEW_OK
3、支持的opengl版本判断使用if(GL_VERSION_x_x) {} (GL_VERSION_4_0)来判断
int bits = 32; static PIXELFORMATDESCRIPTOR pfd = // pfd Tells Windows How We Want Things To Be { sizeof(PIXELFORMATDESCRIPTOR), // Size Of This Pixel Format Descriptor 1, // Version Number PFD_DRAW_TO_WINDOW | // Format Must Support Window //PFD_DRAW_TO_BITMAP | PFD_SUPPORT_OPENGL, // Format Must Support OpenGL //PFD_DOUBLEBUFFER, // Must Support Double Buffering PFD_TYPE_RGBA, // Request An RGBA Format bits, // Select Our Color Depth 0, 0, 0, 0, 0, 0, // Color Bits Ignored 0, // No Alpha Buffer 0, // Shift Bit Ignored 0, // No Accumulation Buffer 0, 0, 0, 0, // Accumulation Bits Ignored 16, // 16Bit Z-Buffer (Depth Buffer) 0, // No Stencil Buffer 0, // No Auxiliary Buffer PFD_MAIN_PLANE, // Main Drawing Layer 0, // Reserved 0, 0, 0 // Layer Masks Ignored }; int piexelFormat = ChoosePixelFormat(mHDC, &pfd); if (!SetPixelFormat(mHDC, piexelFormat, &pfd)) { return false; } _context = wglCreateContext(mHDC); if (!wglMakeCurrent(mHDC, _context)) { return false; } GLenum err = glewInit(); if (GLEW_OK != err) { return false; }
二、Opengl可以直接向DIB的DC(设备无关)上绘制,但透明度始终为0.导致updateLayeredWindows时将产生一种特殊的混合效果。(重点:透明度为零,其他颜色数据不为0时 update效果不是纯透明)这将导致误会,实际上只是没有透明度数据引起的。【注:这里的误会是指GDI+函数DrawRectangle 填充色为255时也会引起此效果,设置为254即可,这两个机制不知是否相同,有时间的同学可以试试 然后结果给大家分享一下】
Xcode 编译静态库的陷阱(Xcode7如何生成i386的静态库)
Unicode详细解释
http://objccn.io/issue-9-1/
ES3.0 中 Vertex Shader 的out变量未赋值,导致 glLinkProgram 失败
这其实是我在群里问这位大神的问题,当时是获取不到 glGetUniformLocation(program, “s_texture”); 这个东西。
版权声明:本文转自http://blog.csdn.net/huutu 转载请带上 http://www.thisisgame.com.cn
GLSL中,定义了但是 没有使用的变量会被优化掉,在之前就遇到过。
(GLSL 中 ,如果定义的 变量 没有在代码中使用到,那么不会被编译,用 glget* 是获取不到的,返回 -1 。算是被优化掉了。
http://blog.csdn.net/huutu/article/details/50322905 )
而且如果 Vertexshader 中的定义的 Out 变量未使用,被优化掉后,会引起 FragmentShader 的问题,导致 glLinkProgram 失败!
群里朋友 学习 ES3.0的时候 碰到一个问题:
编译下面的Shader 并没有出错,但是使用
- glGetUniformLocation(program, “s_texture”);
去获取 的时候,却返回了 -1 。转自http://blog.csdn.net/huutu http://www.thisisgame.com.cn
Vertex Shader:
- #version 300 es
- precision mediump float;
- in vec3 inPos;
- in vec2 vTexCoord;
- out vec3 Color;
- out vec2 texCoord;
- uniform mat4 myMat;
- void main() {
- gl_Position = vec4(inPos, 1.0) * myMat;
- Color = inPos;
- }
Fragment Shader:
- #version 300 es
- precision mediump float;
- in vec3 Color;
- in vec2 texCoord;
- out vec4 fragmentColor;
- uniform sampler2D s_texture;
- void main() {
- fragmentColor = texture(s_texture, texCoord);
- }
我的第一反应是:
s_texture 没有使用,被优化掉了。
然而并没有,让朋友把工程传过来看了一段时间才发现
在Vertex Shader 中的 out vec2 texCoord; 没有赋值!!
所以 texCoord 是被优化掉了的。
但是 在 FragmentShader 中的 in vec2 texCoord 是存在的变量,所以呢 glCompileShader 操作的时候是不会报错的!
转自http://blog.csdn.net/huutu http://www.thisisgame.com.cn
难道 OpenGL 没有处理这个问题?当然不是。
这个错误是在 glLinkProgram 阶段抛出的。 朋友没有去获取 glLinkProgram 的状态,所以没有发现这个错误。
抛出了很详细的错误
- WARNING: Output of vertex shader ‘Color’ not read by fragment shader
- ERROR: Input of fragment shader ‘texCoord’ not written by vertex shader
- (lldb)
利用dSYM文件解析IOS的崩溃文件*.crash(开源小软件
看了很多介绍如何用命令行解析的贴子,由于本人太笨,敲命令行觉得太费劲,还有点记不住,写了这么一个小工具。开源的目的是可能有bug,希望大家帮忙完善。
使用非常简单,选中对应的crash、dsym、ipa文件拖入窗口中释放即可。
如果已经拖过对应的dsym和ipa会在本app文件夹内留下缓存、下次只拖入crash文件即可。占用空间过大时暂时请右键后选择『显示包内容』自行清理。
GitHub:https://github.com/wudijimao/VisualSymbolicateCrash
app下载:https://github.com/wudijimao/VisualSymbolicateCrash/raw/master/VisualSymbolicateCrash.app.zip
软件运行效果图如下:
PS:如果系统的符号解析不能请插入崩溃的手机打开XCode等待同步符号文件。
IOS开发中遇到转发delegate的时候不要再那么傻了
http://sam.dods.co/blog/2014/08/03/secondary-delegate/
delegate代理(截取delegate消息用)
#import <Foundation/Foundation.h> #import <UIKit/UIKit.h> @interface MovieSDKDelegateProxy : NSObject <UITableViewDelegate> @property (nonatomic, weak)id primaryDelegate; @property (nonatomic, weak)id secondaryDelegate; @end
@implementation MovieSDKDelegateProxy - (BOOL)respondsToSelector:(SEL)aSelector { return ([self.primaryDelegate respondsToSelector:aSelector] || [self.secondaryDelegate respondsToSelector:aSelector]); } - (NSMethodSignature *)methodSignatureForSelector:(SEL)selector { NSObject *delegateForResonse = [self.primaryDelegate respondsToSelector:selector] ? self.primaryDelegate : self.secondaryDelegate; return [delegateForResonse respondsToSelector:selector] ? [delegateForResonse methodSignatureForSelector:selector] : nil; } - (void)forwardInvocation:(NSInvocation *)invocation { [self invokeInvocation:invocation onDelegate:self.primaryDelegate]; [self invokeInvocation:invocation onDelegate:self.secondaryDelegate]; } - (void)invokeInvocation:(NSInvocation *)invocation onDelegate:(id)delegate { if ([delegate respondsToSelector:invocation.selector]) { [invocation invokeWithTarget:delegate]; } } @end
use:注意设置每个delegate时必须重新将_proxy设置给tableView的delegate。这样才能保证tableView重新检查delegate支持的方法。(tableView会在设置delegate时将大多数方法都检查一下是否支持,回调时不再检查)
@implementation MovieSDKRefreshTableView { MovieSDKDelegateProxy *_proxy; } - (instancetype)initWithFrame:(CGRect)frame style:(UITableViewStyle)style { self = [super initWithFrame:frame style:style]; if (self) { _proxy = [MovieSDKDelegateProxy new]; _proxy.primaryDelegate = self; [super setDelegate:self]; } return self; } - (id<UITableViewDelegate>)delegate { return _proxy.secondaryDelegate; } - (void)setDelegate:(id<UITableViewDelegate>)delegate { _proxy.secondaryDelegate = delegate; [super setDelegate:nil]; //Important:must reset delegate, because tableView check all response to @selecter when set delegate [super setDelegate:_proxy]; } @end