小编Gin*_*ane的帖子

如何在Swift中获取值类型或自定义结构的内存地址?

我试图更深入地了解Swift如何复制值类型:

您在代码中看到的行为将始终如同副本一样.但是,当绝对必要时,Swift仅在幕后执行实际复制.

为了提高我的理解,我想得到一个值类型的内存地址.我尝试了unsafeAddressOf(),但这不适用于结构,它似乎将Swift的标准库类型转换为引用类型(例如,String被转换为NSString).

如何获取值类型的内存地址,如Int的实例,或Swift中的自定义结构?

struct ios swift swift2 swift2.2

10
推荐指数
3
解决办法
1万
查看次数

CVOpenGLESTextureCacheCreateTextureFromImage vs glTexImage2D

我有一个iOS应用程序,我正在从中读取视频AVFoundation并将每个视频帧加载到OpenGL纹理中并在屏幕上显示GLKView.

我没有问题为每个帧复制视频缓冲区:

CVPixelBufferRef buffer = [someAVPlayerItemVideoOutput copyPixelBufferForItemTime:itemTime itemTimeForDisplay:nil];
Run Code Online (Sandbox Code Playgroud)

但是当我将视频加载到openGL中时,我会得到不同的结果,具体取决于我使用的方法.我从观看Apple的WWDC 2011 Session 414 OpenGL视频的进展中得到的理解是,新CVOpenGLESTextureCacheCreateTextureFromImage功能应该比仅通过读取像素缓冲区更快glTexImage2D.但是,当使用具有大量计算的着色器程序时,无论使用哪种方法,我都会获得相同的帧速率.而且,CVOpenGLESTextureCacheCreateTextureFromImage实际上是给我一个奇怪的"块状"失真,而glTexImage2D不是.失真似乎好像屏幕上的随机块不会使用最新帧更新.

这是我用于使用方法创建纹理的代码CVOpenGLESTexture:

CVOpenGLESTextureRef videoFrameTexture = NULL;
CVPixelBufferLockBaseAddress(buffer, 0);    
CVOpenGLESTextureCacheCreateTextureFromImage(kCFAllocatorDefault, videoTextureCache, buffer, NULL, GL_TEXTURE_2D, GL_RGBA, CVPixelBufferGetWidth(buffer), CVPixelBufferGetHeight(buffer), GL_BGRA, GL_UNSIGNED_BYTE, 0, &videoTexture);
glBindTexture(GL_TEXTURE_2D, CVOpenGLESTextureGetName(videoFrameTexture));
CVBufferRelease(buffer);    
CFRelease(videoFrameTexture);
Run Code Online (Sandbox Code Playgroud)

以下是我用来加载via的替代方法glTexImage2D:

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, CVPixelBufferGetBytesPerRow(buffer)/4, CVPixelBufferGetHeight(buffer), 0, GL_RGBA, GL_UNSIGNED_BYTE, CVPixelBufferGetBaseAddress(buffer));
Run Code Online (Sandbox Code Playgroud)

为什么我会使用奇怪的失真和没有更好的帧速率CVOpenGLESTextureCacheCreateTextureFromImage()

video opengl-es avfoundation ios opengl-es-2.0

6
推荐指数
0
解决办法
2153
查看次数

我什么时候应该调用 CVPixelBufferLockBaseAddress 和 CVPixelBufferUnlockBaseAddress?

在 iOS6 中,我使用 OpenGL 在 AVFoundation 视频帧上进行一些渲染。我看过很多使用 CVPixelBufferLockBaseAddress 和 CVPixelBufferUnlockBaseAddress 的示例代码,但我不清楚何时执行锁定和解锁,或者为什么要这样做。当CPU修改内存时我应该锁定地址吗?或者我应该在 GPU 读取数据时锁定它?我应该什么时候解锁?为什么我想要解锁?我已经看到了Stack Overflow 的答案,但它并没有完全回答我的问题。

avfoundation ios opengl-es-2.0 gpuimage

5
推荐指数
1
解决办法
3393
查看次数

iPhone:一个对象,一个线程

在iPhone上,我想在一个单独的线程中对图像进行一些操作.我不想处理semiphores,锁定等,而是使用'One Object,One Thread'方法安全地编写这个并发操作.我不确定将对象复制到新线程的正确方法是什么,以便在主线程中不访问该对象.我使用'复制'方法吗?如果是这样,我是在线程之前还是在线程内部这样做?

     ...
    -(void)someMethod{
        UIImage *myImage;
        [NSThread detachNewThreadSelector:@selector(getRotatedImage:) toTarget:self withObject:myImage];

    }

    -(void)getRotatedImage:(UIImage *)image{
        ...
        ...
        UIImage *copiedImage = [image copy];
        ...
        ...
    }
Run Code Online (Sandbox Code Playgroud)

iphone concurrency multithreading objective-c nsthread

3
推荐指数
1
解决办法
514
查看次数

我的网络应用程序如何在不达到API限制的情况下检索Twitter用户照片?

我正在编写一个仅需要Twitter用户个人资料照片的网络应用程序.我通过解析users/show XML未经身份验证的API调用来检索这些(http://apiwiki.twitter.com/Twitter-REST-API-Method:-users%C2%A0show):

$twitterXML = simplexml_load_file("http://twitter.com/users/show/".$twitterUsername.".xml");
Run Code Online (Sandbox Code Playgroud)

在我的测试中,我一直在达到Twitter API速率限制.当我以上述方式检索用户照片URL时,是对我服务器的IP地址施加的Twitter API速率限制,以便使用我的网络应用程序的任何人都可以达到150 /小时限制?或者是对访问我网页的用户的IP地址施加了限制?

有没有办法检索用户的个人资料照片而不受速率限制的影响?

php api twitter

2
推荐指数
1
解决办法
2568
查看次数