标签: objective-c++

是否禁止从Objective-C++类方法体中调用经典C函数?

我经历过Objective-C++的一些奇怪的行为.我有一个Objective-C++类,它在方法体中调用经典的C函数.但是链接器找不到C函数.

我在这里描述了这个问题: 在Objective-C方法体中使用的C函数找不到Xcode打印符号

我通过将Objective-C++类更改为Objective-C类来解决问题,但问题仍然存在.是否禁止在Objective-C++类中调用C函数?

c linker function objective-c++

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

XCode GCC-4.0 vs 4.2

我刚刚将编译器选项从4.0更改为4.2.

现在我收到一个错误:

jump to case label crosses initialization of 'const char* selectorName'
Run Code Online (Sandbox Code Playgroud)

它在4.0中运行良好

有任何想法吗?

xcode gcc objective-c objective-c++

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

可以通过Objective-C块捕获堆栈上的C++类实例吗?

尝试在Objective-C块中捕获堆栈上的C++类实例时,我看到了一些奇怪的行为.请考虑以下代码:

#import <Foundation/Foundation.h>
#include <stdio.h>

struct Test
{
  Test() : flag(0) { printf("%p default constructor\n", this); }
  Test(const Test& other) : flag(0) { printf("%p copy constructor\n", this); }
  ~Test() { flag = 1; printf("%p destructor\n", this); }

  int flag;
};

int main(int argc, char **argv)
{
  NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

  Test test;
  void (^blk)(void) = ^(void)
    {
      printf("flag=%d (test=%p)\n", test.flag, &test);
    };
  printf("about to call blk\n");
  blk();

  [pool release];

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

可以预期,当test块捕获局部变量时blk,它具有一致的状态.但事实并非如此.此代码的输出如下:

0x7fff5fbff650 …
Run Code Online (Sandbox Code Playgroud)

c++ objective-c objective-c++ objective-c-blocks

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

iOS UIwebView Auth Cookies

我有一个UIWebView加载用户身份验证的网站.该站点创建一个身份验证cookie.在浏览器中,除非您清除cookie,否则您将始终登录.当xCODE加载时,它可以在查看cookie jar时看到列出的cookie,但不会发送到webView.我想知道如何让webView意识到auth cookie就在那里,所以它不会每次都继续提示用户进行身份验证.

iphone objective-c++ webview ipad ios

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

混合C++和Objective C

在哪里可以找到关于在Objective-C中使用C++的具体文档或dos和donts文档?

Apple似乎已经从他们的网站上删除了该文档,我很困惑地整理了博客中的一些信息和这里发布的问题.

任何人都可以指导相同的事情.

我们何时使用.mm文件,同时混合语法或在.m文件中使用属于C++类的对象?

虽然在属于两种不同语言的函数之间传递对象,比如将objective-c对象传递给cpp文件中的函数,但是有必要在void*中收集它,或者我可以使用(ObjectiveC inteface)*?

objective-c objective-c++

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

在iOS上的ARC下,C++代码如何表现?

在ARC下,编译器添加了retain,release调用.C++指针会发生什么?Objective C编译器可以忽略它们吗?我没有很多与C++混合使用Objective C的经验,我正在遵循一个box2d教程,该教程在c ++中有整个引擎,但该示例在ARC之前.

我必须做一些特别的事吗?

objective-c++ ios automatic-ref-counting

5
推荐指数
2
解决办法
1499
查看次数

concat两个音频文件一个接一个ios

我想将两个音频文件连接成一个.我做了以下代码.请检查下面.

- (BOOL)combineFiles{
    AVMutableComposition *composition = [[AVMutableComposition alloc] init];

    AVMutableCompositionTrack *compositionAudioTrack = [composition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid];
    [compositionAudioTrack setPreferredVolume:0.8];
    NSString *soundOne  =[[NSBundle mainBundle]pathForResource:@"test1" ofType:@"m4a"];
    NSURL *url = [NSURL fileURLWithPath:soundOne];
    AVAsset *avAsset = [AVURLAsset URLAssetWithURL:url options:nil];
    AVAssetTrack *clipAudioTrack = [[avAsset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0];
    [compositionAudioTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, avAsset.duration) ofTrack:clipAudioTrack atTime:kCMTimeZero error:nil];

    AVMutableCompositionTrack *compositionAudioTrack1 = [composition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid];
    [compositionAudioTrack1 setPreferredVolume:0.8];
    NSString *soundOne1  =[[NSBundle mainBundle]pathForResource:@"test2" ofType:@"m4a"];
    NSURL *url1 = [NSURL fileURLWithPath:soundOne1];
    AVAsset *avAsset1 = [AVURLAsset URLAssetWithURL:url1 options:nil];
    AVAssetTrack *clipAudioTrack1 = [[avAsset1 tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0];
    [compositionAudioTrack1 insertTimeRange:CMTimeRangeMake(kCMTimeZero, avAsset.duration) ofTrack:clipAudioTrack1 atTime:kCMTimeZero …
Run Code Online (Sandbox Code Playgroud)

iphone objective-c++ avfoundation ipad ios

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

malloc:从空闲列表中出列的无效指针

我的OS X项目中有一些C++代码,因此可以分配一个数组:

C * p = new C[lengthHint + 2];
Run Code Online (Sandbox Code Playgroud)

这是一个模板类; Cunsigned short.lengthHint是1.这都是无关紧要的.我在运行时得到的错误是:

malloc: *** error for object 0x60800000c4f0: Invalid pointer dequeued from free list
*** set a breakpoint in malloc_error_break to debug
Run Code Online (Sandbox Code Playgroud)

它似乎malloc失败了,因为之前调用free释放了无效的东西.但似乎free当时会抱怨这一点.

显然,现在有成千上万的malloc/freenew/delete调用执行,这相同的代码运行而不会在iOS上运行的其他程序中的问题和OS X.我不知道如何处理调试这和我在寻找的建议.

c++ malloc xcode pointers objective-c++

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

pod中的供应框架无法被项目或其他pod识别(Cocoapods/Cocoapods#3810)

在我的项目中,我引用了我公司使用的几个私有pod.其中一个称为DKKit的pod依赖于另一个我称为BaseProKit的私有pod.BaseProKit包含3个框架,它在其头部和实现文件中引用,我认为这些框架被认为是vendored_frameworks.在BaseProKit的现有头文件中,通过导入引用了这些框架,这些框架#import <PPCommon/PPCommon>在编译时工作得很好(通常),而仅依赖于BaseProKit pod.但是,当包含DKKit时,DKKit会在导入BaseProKit.h包含上述导入的导入时查找标题别名.然而,在DKKit的上下文中,似乎DKKit pod不知道PPCommon框架的存在,并且它只看到它的头文件的别名通过Pods-BaseProKit引用.因此,任何和所有引用<PPCommon/ANYTHING>创建编译错误(未找到),以及我迄今为止唯一能够弄清楚的方法是只#import "PPCommon.h"需要通过引用来调整整个BaseProKit中的所有导入项目,这感觉不对.

我已经包含以下文件供参考:BaseProKit的Podspec:

  s.name         = "BaseProKit"
  s.version      = "1.0.5"
  s.source_files = "BaseProKit/BaseProKit.h",
                   "BaseProKit/Data/*.{h,m}",
                   "BaseProKit/Sensor Calibration/*.{h,m}",
                   "BaseProKit/SP3D/BaseballSceneController/*.{h,m}",
                   "BaseProKit/SP3D/SceneElements/*.{h,m,hpp,cpp}",
                   "BaseProKit/SP3D/SceneEnvironment/*.{h,m}",
                   "BaseProKit/Third Party/DeviceModelDetector.{h,m}",
                   "BaseProKit/Third Party/SkyProKitEmptyMMFile.{h,mm}"
  s.resources = "BaseProKit/SatelliteLibrary/SatelliteLibrary.bundle","BaseProKit/SP3D/SP3DResources.bundle", "BaseProKit/SP3D/Models/Vertex Data/*"
  s.frameworks = "GLKit", "OpenGLES", "Foundation", "UIKit", "Accelerate", "PPCommon", "SatelliteLibrary", "SP3D"
  s.library = 'c++'
  s.prefix_header_file = "BaseProKit/BaseProKit-Prefix.pch"
  # s.public_header_files = "BaseProKit/PPCommon/PPCommon.framework/Headers/*.h", "BaseProKit/SatelliteLibrary/SatelliteLibrary.framework/Headers/*.h", "BaseProKit/SP3D/SP3D.framework/Headers/*.h"

  s.vendored_frameworks = "BaseProKit/PPCommon/PPCommon.framework",
                          "BaseProKit/SatelliteLibrary/SatelliteLibrary.framework",
                          "BaseProKit/SP3D/SP3D.framework"
Run Code Online (Sandbox Code Playgroud)

DKKit的Podspec:

    s.name          = "DKKit"
    s.version       = "1.0.0"

    s.source_files  = 'DKKit/**/*.{h,m}'
    s.resources = 'DKKit/**/*.xcdatamodeld' …
Run Code Online (Sandbox Code Playgroud)

frameworks objective-c objective-c++ cocoapods

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

OpenCV在游乐场

可以使用Objective-C++框架包装C++代码,以便在Swift代码中使用,包括Playground环境.我的一些框架包括OpenCV库,这在Swift正确包装时效果很好.不幸的是,由于以下错误,我无法在游乐场中使用这些:

Playground execution failed: error: Couldn't lookup symbols: _OBJC_CLASS_$_MyClass
Run Code Online (Sandbox Code Playgroud)

... 我的框架MyClass的子类在哪里NSObject.实际上,在链接到其中一个OpenCV库之后,没有框架符号可用于游乐场(例如,-lopencv_core在构建设置中添加到"其他链接器标志"之后),这些符号是否与OpenCV(或C++)有关.那件事).

我非常喜欢在导入框架的上下文中在游乐场中开发一些小功能,成功的解决方案最终将最终结束.同样,OpenCV对我来说是一个重要的图书馆,因此必须在游乐场玩它才能解放(更不用说有趣)了.

我还在使用Swift 1.2(OS 10.10.4),因为我即将向App Store提交更新,但如果Swift 2在这方面有任何改变,我会感兴趣.至于OpenCV,这是3.0.0版本,使用CMake和默认配置构建.

编辑:刚刚在Apple的论坛中发现了这个问题(比我更好,更普遍):https://forums.developer.apple.com/thread/6246

c++ opencv frameworks objective-c++ swift-playground

5
推荐指数
0
解决办法
853
查看次数