小编Tur*_*age的帖子

Sleep和NSRunLoop之间的区别runMode:beforeDate:

我最近发现,当等待我的NSURLConnections通过它时,如果我告诉等待线程做的话,效果会好得多:

[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];

代替

[NSThread sleepForTimeInterval:1];

在阅读了一些关于NSRunLoop runMode:beforeDate之后:听起来它总是优于睡眠.有人发现这是真的吗?

iphone objective-c nsthread ios

4
推荐指数
1
解决办法
4345
查看次数

检查InApp购买是否受限制

在iPhone上我可以进入General-> Restrictions并锁定InApp购买.在代码方面,我如何检查用户是否已完成此操作?

iphone in-app-purchase ios

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

JNI静态库无法链接

我正在尝试调试在构建应用程序的C++端时遇到的一些链接错误.Android.mk如下所示:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := GLES
LOCAL_SRC_FILES := ModelGLES.cpp RendererGLES.cpp
LOCAL_LDLIBS    := -llog -lGLESv1_CM
LOCAL_LDFLAGS   := -Wl,-Map,$(LOCAL_MODULE).map 

include $(BUILD_SHARED_LIBRARY)

include $(CLEAR_VARS)

LOCAL_MODULE    := SndSys
LOCAL_SRC_FILES := SndSys.cpp libaudio_wrapper.cpp
LOCAL_STATIC_LIBRARIES := libaudio_ARM_NDK
LOCAL_LDLIBS := -llog
LOCAL_LDFLAGS   := -Wl,-Map,$(LOCAL_MODULE).map 
LOCAL_C_INCLUDES := $(LOCAL_PATH)

include $(BUILD_SHARED_LIBRARY)
Run Code Online (Sandbox Code Playgroud)

我得到的错误是libaudio_wrapper.链接器无法解析libaudio_ARM_NDK中的符号.文件夹结构如下所示:

App\jni\SndSys.cpp libaudio_wrapper.cpp Android.mk libaudio_ARM_NDK.a

我在jni文件夹中调用ndk-build表单.输出如下:

Gdbserver      : [arm-linux-androideabi-4.4.3] libs/armeabi/gdbserver
Gdbsetup       : libs/armeabi/gdb.setup
Compile++ thumb  : GLES <= ModelGLES.cpp
Compile++ thumb  : GLES <= RendererGLES.cpp
SharedLibrary  : libGLES.so
Install        : libGLES.so => libs/armeabi/libGLES.so
Compile++ …
Run Code Online (Sandbox Code Playgroud)

java-native-interface android android-ndk

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

将NSString转换为char时无法找到文件*

所以我有一个独立于平台的API来加载文件,它将char*作为一个值.我在GetResource函数中编写了一些测试代码,它使用了字符串文字并且工作正常.但是,当我转换为使用char*并转换回NSString时,无法找到该文件.

工作代码:

bool GetResource(const char* filePath, uint8*& allocatedBuffer, uint32& size) {

    bool success = false;
    NSString* path = [[NSBundle mainBundle] pathForResource: "models/testModel" ofType: @"obj"];
Run Code Online (Sandbox Code Playgroud)

不工作代码:

NSString* nsModelString = @"models/testModel";
gDatastore->GetResource([nsModelString UTF8String], buffer, size);

....

bool GetResource(const char* filePath, uint8*& allocatedBuffer, uint32& size) {

    bool success = false;
    NSString* nsFilePath = [NSString stringWithFormat:@"%c" , filePath];
    NSString* path = [[NSBundle mainBundle] pathForResource: nsFilePath ofType: @"obj"];
Run Code Online (Sandbox Code Playgroud)

谁能告诉我我错了什么?有没有一种简单的方法来查看NSString并查看内容?

iphone objective-c

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

处理将简单数据传递给'withObject'调用的正确方法

当使用objective-c时,有许多不同的方法可以偶然发现将使用withObject的东西.performSelectorOnMainThread就是一个很好的例子.

[self performSelectorOnMainThread:@selector(aSelector) withObject:anObject waitUntilDone:YES];
Run Code Online (Sandbox Code Playgroud)

这将使用对象anObject调用选择器aSelector.我经常发现自己有一个选择器,它采用一个简单的数据类型,如int或enum,我想把它传递给'withObject'.这样做的正确方法是什么?

objective-c

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

处理自动释放池和线程

如果我创建一个带回调的线程,比如..

NSAutoreleasePool* pool = [NSAutoreleasePool alloc] init];
while(1) {
   //Process Stuff
}
[pool release];
Run Code Online (Sandbox Code Playgroud)

我认为任何自动释放的东西永远不会被释放,因为池永远不会被耗尽.我可以改变这样的事情:

while(1) {
   NSAutoreleasePool* pool = [NSAutoreleasePool alloc] init];
   //Process Stuff
   [pool release];
}
Run Code Online (Sandbox Code Playgroud)

但是经常分配/删除似乎有点浪费.有没有办法可以留出一块内存,一旦它完全释放池?

iphone memory-management objective-c nsautoreleasepool

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

警告:cWorld"可能无法响应'+ alloc'

我刚刚开始使用Objective-C但是已经完成了一堆C++.它让我很难过,因为我一直在弄乱我的Objective-C语法.

我正在崩溃创建我的第一个Objective-C对象.我认为这可能与alloc函数的这个警告有关.

cWorld may not respond to '+alloc'
Run Code Online (Sandbox Code Playgroud)

我已经看到很多针对'-alloc'的修复,但没有为+ alloc做任何修复.任何人都知道可能导致它的原因是什么?

崩溃是在asm代码中,我没有得到太多信息.该警告是下面看到worldContext.mm行... // *警告IS HERE

这是来自worldContext.mm的片段以及world.mm + world.h的所有片段

worldContext.mm

#import "worldContext.h"
#import "scenemanager.h"
#import "matrix4.h"
#import "world.h"

@implementation cWorldContext

- (void)Initialize {

    mSceneManager = new cSceneManager();


    mWorldObj =[[cWorld alloc] init];    //***** WARNING IS HERE
    [mWorldObj Initialize: mSceneManager];
}
Run Code Online (Sandbox Code Playgroud)

World.h

#ifndef __WORLD
#define __WORLD

class cModelBase;
class cSceneManager;

@interface cWorld {

    cSceneManager* mSceneManager;
    cModelBase* mWorldModel;
}

- (void)Initialize: (cSceneManager*) sceneManager;
- (void)Update;
- (void)Shutdown;

@end

#endif
Run Code Online (Sandbox Code Playgroud)

World.mm

#import "world.h"

@implementation cWorld …
Run Code Online (Sandbox Code Playgroud)

iphone objective-c

0
推荐指数
1
解决办法
851
查看次数