标签: objective-c++

NSMutableArray 到 std::vector

是否可以将 NSMutableArray 的内容转换为 std::vector ?如果是这样,应该在 Objective-C 或 C++ 代码中完成吗?

c++ objective-c objective-c++ stdvector ios

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

如何在 Swift 中将 PNG 转换为 WebP?

我正在尝试在 Swift 中转换 Webp 中的 PNG 图像,我工作的唯一框架是OpenCV通过Objective-c++
问题是,如果我将图像大小调整为 512x512(这是我需要的分辨率),它就会崩溃: 在此输入图像描述 如果我将图像大小(无论是使用 OpenCV 还是使用 Swift)调整为另一个分辨率(例如 510x510),它不会崩溃。

奇怪的是,在模拟器上它永远不会崩溃,而在 iPhone XS 上它崩溃的次数达到 90%。

如何在 Swift 中将 PNG 转换为 Webp?如果 Mat 是 512x512,为什么 OpenCV 在imwrite
指令上崩溃?

更新
OpenCV 版本:3.4.2
我发现当之前从 Core Graphics 框架处理 PNG 图像时会发生此问题。我需要使用它,因为我以这种方式将 UIVIew 保存为 UIImage:

let renderer = UIGraphicsImageRenderer(bounds: bounds)
        return renderer.image { rendererContext in
            layer.render(in: rendererContext.cgContext)
        }
Run Code Online (Sandbox Code Playgroud)

opencv objective-c++ ios swift

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

在Objective-C++中使用C++类

我在Cocoa应用程序中使用一个小的C++库(atm只是一个非常简单的例子来学习我应该怎么做).

所以我在命名空间中有一个小的C++类,如下所示:

namespace testlib {
class Test {
public:
    Test(unsigned a);
    Test operator+(const Test& other) const;
    Test operator+(unsigned other) const;
    Test& operator+=(unsigned other);
    Test& operator+=(const Test& other);
    unsigned getValue() const;
private:
    unsigned theValue;
};
}
Run Code Online (Sandbox Code Playgroud)

然后我有一个带有以下代码的.h文件:

#import <Foundation/Foundation.h>
#import "testlib.h"

@interface test : NSObject {
     testlib::Test* testClass;
}

- (id)init;
- (id)add: (unsigned)value;
- (unsigned)value;
- (void)dealloc;

@property void* testClass;

@end
Run Code Online (Sandbox Code Playgroud)

最后一个实现(在一个名为test.mm的文件中):

#import "test.h"

@implementation test

@synthesize testClass;

- (id)init {
 testClass = new testlib::Test(0);
 return self;
}

- (void)dealloc …
Run Code Online (Sandbox Code Playgroud)

c++ objective-c objective-c++

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

停止失控的Lua子进程

我使用LuaObjCBridge在一个Objective-C应用程序中嵌入了Lua.如果需要花费太多时间(无限循环?),我需要知道如何停止Lua进程.

会在单独的线程中运行它有帮助吗?

c c++ lua multithreading objective-c++

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

变量不是类的静态成员

我正在开发一个GameKitHelper类,它主要用C++编写,但在某些地方使用Objective-C,在.mm文件中.

我删除了一些功能来隔离错误:

void GameKitHelper::PopulateFriendScores(DynArray<GameCenterScore> *FriendScores)
{
    GKLeaderboard *leaderboardRequest = [[GKLeaderboard alloc] init];
    if (leaderboardRequest != nil)
    {
        leaderboardRequest.playerScope = GKLeaderboardPlayerScopeFriendsOnly;
        leaderboardRequest.timeScope = GKLeaderboardTimeScopeAllTime;
        leaderboardRequest.range = NSMakeRange(1,25);

        [leaderboardRequest loadScoresWithCompletionHandler: ^(NSArray *scores, NSError *error) 
         {
             int i = 0;
             printf("%d", i);
         }];
    }
}
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:

'int GameKitHelper::i' is not a static member of 'class GameKitHelper'
Run Code Online (Sandbox Code Playgroud)

objective-c objective-c++ ios

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

编写`NSOutputStream`的问题.

我有一个基本问题,在使用时NSOutputStream,我们是否应该等待NSStreamEventHasSpaceAvailable发送数据包,以便我们可以[NSOutputStream write]在需要时调用它,

我相信NSStream应该照顾写功能......

如果这不正确,那么请提供您对以下逻辑的看法,

=====写上NSOutputStream=================有队列添加数据包,即发送//StreamQueue.h

@interface StreamQueue : NSObject <NSCoding>
{
    NSMutableArray * data;
    NSRecursiveLock * theLock;
}

#pragma mark ?Initialization & Deallocation?
- (id)init;
- (id)initWithQueue:(CommQueue *)queue;
- (id)initWithCoder:(NSCoder *)coder;
- (void)dealloc;
- (void)encodeWithCoder:(NSCoder *)coder;

#pragma mark
#pragma mark ?Accessor Methods?
- (int)size;
- (BOOL)isEmpty;
- (id)top;
- (NSArray *)data;

#pragma mark
#pragma mark ?Modifier Methods?
- (void)enqueue:(id)object;
- (id)dequeue;
- (void)removeAll;
@end
Run Code Online (Sandbox Code Playgroud)

及其实施

#import "StreamQueue.h"


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

macos cocoa objective-c++ nsstream

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

不能在带有Objective-C++代码的c ++类中使用dispatch_sync

我需要在继承C++类,这与iPhone摄像头视频录制(获得作品使用的Objective-C++代码CMSampleBufferRef通过其他本地Objective-C类WrapperCMSampleBufferDelegate).

AVCaptureVideoOutput,我有自己的工作dispatch_queue_t callbackQueue,所以,当我想从我得到的最后一帧Wrapper类,我需要锁定callbackQueue,使其等到复制将完成.

据我所知,已完成dispatch_sync,同步captureOutput.callbackQueue.但我不能让这段代码工作:

// .mm
frame_t MyCppClass::getLastFrame()
{
    dispatch_sync(pCaptureVideoDataOutput.sampleBufferCallbackQueue, ^{ // error: no matching function for call to 'dispatch_sync'

        CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(wrapperInstance->currentBuffer);
        CVPixelBufferLockBaseAddress(imageBuffer,0);

        // doing copying frame data from buffer...

        CVPixelBufferUnlockBaseAddress(imageBuffer, 0);
    }); // error: control may reach end of non-void block

    return frame;
}

// .h
@interface Wrapper : NSObject <AVCaptureVideoDataOutputSampleBufferDelegate> {
  CMSampleBufferRef currentBuffer;
}
@end

// .mm
@implementation …
Run Code Online (Sandbox Code Playgroud)

objective-c objective-c++ grand-central-dispatch ios avcapture

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

混合Objective-C和boost/C++

我终于有了一个非常我通过CLI工作图搜索的基本版本,但我发现自己在我需要重构所有的代码的位置.因为我在mac上进行这个编程,所以我在考虑使用Cocoa作为GUI,然后将我的C++函数作为workhorses使用.这只是一个临时修复,因为最终我希望能够在linux盒/集群上运行我的所有代码. 是我关于实现的最后一个问题,我确实让它在boost中工作,滚动我自己的图形函数(现在).

所以这就是我的想法:为图形本身构建C++类,并为我想要计算的量建立单独的函数或方法. 是我能找到的最新描述,它涉及混合Objective-C和C++.但我想知道:

是否会优化在Xcode中编译我的C++代码?重点是我希望C++代码能够完全优化以实现快速内存访问,多线程,并且可以访问boost库.然后,我可以将C++类封装在一个包装ObjectiveC类中.要做到这一点,我基本上有2个类,对吗?C++类包含.h和.cpp文件并包含boost库,然后是带有.h和.mm文件的ObjC类包装器,其中.h不包含对C++类的任何引用,我使用include in .mm文件.然后,我可以使用目标C.我正常的MVC设计和执行GUI只要我给dealloc的命令核弹攻击的C++类的能力,我不必担心内存管理?ARC是否也适用于C++,它是否能让OSX能够内存管理和清理我的C++代码?

我怀疑,如果我想穿,我会去的升压线程,因为编码GCD将使平台特定的(尽管就目前而言,这是所有将在运行).我认为,就目前而言,我将远离核心数据,因为我只是通过解析文本文件来创建我的图形.

c++ optimization boost objective-c objective-c++

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

从std :: string转换为NSString

在这种情况下,如何将std :: string转换为NSString?

void Piles::imagePlacer(Card card, int xCoord, int yCoord) {
    string cardType = card.toString();

    UIImageView *cardImg = [[UIImageView alloc]
                 initWithImage:cardType];
    cardImg.frame = CGRectMake(xCoord, yCoord, 126, 190);
    [self.view addSubview:cardImg];
}
Run Code Online (Sandbox Code Playgroud)

我想使用一个字符串作为图像的名称(假设我有一个UIImages列表,其名称对应于存储在cardType中的所有可能的字符串)?

objective-c objective-c++

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

通过属性getter访问std :: map会返回垃圾值

我在项目中遇到了这个问题,并将其归结为以下示例代码:

#import <map>

typedef std::map<int, int> exampleMap;
@interface ViewController ()

@property (nonatomic, assign) exampleMap map;
@end

@implementation ViewController

- (IBAction)iterateWithSelf:(id)sender
{
    for (exampleMap::iterator iter = self.map.begin(); iter != self.map.end(); ++iter)
    {
        NSLog(@"We should never hit this line as map is empty");
    }
}
- (IBAction)iterateWithIVar:(id)sender
{
    for (exampleMap::iterator iter = _map.begin(); iter != _map.end(); ++iter)
    {
        NSLog(@"We should never hit this line as map is empty");
    }
}

@end
Run Code Online (Sandbox Code Playgroud)

- iterateWithIVar:执行正常,没有任何内容记录到控制台. - iterateWithSelf:进入for循环,在控制台上打印一行,然后崩溃EXC_BAD_ACCESS

然后我尝试插入... self.map.insert(std::pair<int, int>(0, 1)); …

c++ llvm objective-c++ ios xcode5.1

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