标签: objective-c++

Xcode目标C++ - 避免制作.hh文件?

要获得包含Objective C和C++对象的头文件,我必须将它们从.h重命名为.hh.但我的同事使用.h毫无问题.我们都不明白为什么.

谁能解释一下?

xcode objective-c++

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

Obj-C错误:"在类指针之前预期的非限定id"

我目前正在开发一个iOS开发项目.为方便起见,我在早期阶段将功能分成几个小程序.该项目包括Obj-C,Obj-C++和C++程序.现在我将它们放在最终产品中,并且在(我猜)Obj-C和C++之间的兼容性方面遇到了一些奇怪的行为.

我试图在一个obj-C++程序中初始化一个对象,它来自一个obj-C类.但是在编译obj-C类头文件时我不断收到错误:

#import <Foundation/Foundation.h>
@class AVAssetExportSession;

@interface LibraryImport : NSObject {
AVAssetExportSession * export;   //Error line
NSError* movieFileErr;
}
//class methods
Run Code Online (Sandbox Code Playgroud)

成绩单是这样的:

LibraryImport.h:24:错误:'export'之前的预期unqualified-id

LibraryImport.h:24:错误:实例变量'unnamed'的大小未知

LibraryImport.h:24:错误:预期`;' 在'出口'之前

这个调用在obj-C++文件中是这样的:(这里没有检测到错误,只是觉得有些东西可能相关)

LibraryImport* import = [[LibraryImport alloc] init];
Run Code Online (Sandbox Code Playgroud)

最奇怪的部分是,当它最初由一个纯粹的Obj-C程序调用时,它的工作非常好.但项目性质需要将调用者更改为obj-C++.而且,当我尝试将obj-C文件更改为obj-C++时,我得到的错误比以前更多,包括现有错误.

以下是让我在过去整整一周内撞墙的问题:

  1. 在这种情况下,我如何成功初始化此对象?

  2. 这个问题是否与obj-C和C++之间的兼容性有关?如果是这样,有兼容性的一般解决方案或一些明确的解释吗?

如果需要更多信息,请告诉我(这是我第一次遇到这个问题,我甚至不知道从哪里开始......).任何见解将不胜感激.非常感谢你 :-)

干杯,

曼卡

c++ objective-c core-audio objective-c++ ios

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

C++中的@selector实现

我需要在C++中实现类似@selector(Objecitive-C)的机制.通过谷歌搜索我找到了.它对我没有帮助......

template <class AnyClass> 
class ClassCallback
{
    // pointer to member function
    void (AnyClass::*function)(void);

    // pointer to object
    AnyClass object;  
public:

    ClassCallback()     {  }
    ~ClassCallback()    {  }

    ClassCallback(AnyClass _object, void(AnyClass::*_function)(void))
    : object( _object ), function( _function ) { };

    virtual void call(){ 
         (object->*function)();
    };

};
Run Code Online (Sandbox Code Playgroud)

是否有任何不同的实现方法,类似于Objective-C之类的

typedef struct objc_selector    *MY_SEL;  
Run Code Online (Sandbox Code Playgroud)

需要实现objc_selector它是objective-C中的抽象类.如何实现objc_selector任何想法......

c++ objective-c objective-c++

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

XCode 4.6 clang分析器担心空C++指针比不能为空

运行XCode 4.6的分析器和新的clang编译器,我发出了警告

被调用的C++对象指针为空

即使是像保守的表达

- (BOOL) validate: (Node*) node
{
    if (!self.hypertext) return YES;
    return self.hypertext->HasNode(node);
}
Run Code Online (Sandbox Code Playgroud)

1)我怎样才能说服静态分析仪这是否得到了适当的保护?2)在某些情况下,我可能想断言指针不会为空.怎么样?

xcode clang objective-c++

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

::Instance() 是什么意思?

A& B =
        C::Instance()-> D;
Run Code Online (Sandbox Code Playgroud)

我有这行代码,我想为其编写算法,但我不明白什么C::Instance()意思或做什么。有人可以帮我理解这条线吗?

c++ objective-c++

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

为什么我们不能在 const 对象上调用函数?

问题在于main我想在返回 const 引用的函数set()上调用函数。display()

#include "stdafx.h"
#include "iostream"
#include "string"

using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::ostream;

class screen
{
public:
typedef string::size_type pos;
screen() = default;
screen(pos ht, pos wd, char c) :height(ht), width(ht),contents(ht*wd, c){}
screen(pos ht, pos wd) :height(ht), width(wd), contents(ht*wd, ' '){}
char get()const{ return contents[cursor]; }
inline char get(pos r, pos c)const;
screen &move(pos r, pos c);
screen &set(char);
screen &set(pos r, pos c,char);
const screen& display(ostream &os)const;
    pos …
Run Code Online (Sandbox Code Playgroud)

c++ objective-c++

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

计算 Objective-c 二进制文件中选择器的数量

是否有工具/脚本可以帮助我迭代(或仅计算)objective-c 二进制文件中的所有选择器。我想静态分析目标 c 二进制文件并获得该指标。我试过了,otool -tV但它转储的所有数据都是我无法解析的十六进制数据。有些人建议使用,lldb但我不确定如何做到这一点。

objective-c otool selector objective-c++ lldb

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

在 React Native 0.68 中启用 TurboModule 和 Fabric 会导致很多错误

我正在使用React Native 0.68并尝试使用TurboModulesFabric

\n

这是我的AppDelegate.mm文件

\n
#import "AppDelegate.h"\n\n#import <React/RCTBridge.h>\n#import <React/RCTBundleURLProvider.h>\n#import <React/RCTRootView.h>\n\n#import <React/RCTAppSetupUtils.h>\n\n#if RCT_NEW_ARCH_ENABLED\n#import <React/RCTDataRequestHandler.h>\n#import <React/RCTHTTPRequestHandler.h>\n#import <React/RCTFileRequestHandler.h>\n#import <React/RCTNetworking.h>\n#import <React/RCTImageLoader.h>\n#import <React/RCTGIFImageDecoder.h>\n#import <React/RCTLocalAssetImageLoader.h>\n\n#import <React/CoreModulesPlugins.h>\n#import <React/RCTCxxBridgeDelegate.h>\n#import <React/RCTFabricSurfaceHostingProxyRootView.h>\n#import <React/RCTSurfacePresenter.h>\n#import <React/RCTSurfacePresenterBridgeAdapter.h>\n#import <ReactCommon/RCTTurboModuleManager.h>\n\n#import <react/config/ReactNativeConfig.h>\n\n@interface AppDelegate () <RCTCxxBridgeDelegate, RCTTurboModuleManagerDelegate> {\n  RCTTurboModuleManager *_turboModuleManager;\n  RCTSurfacePresenterBridgeAdapter *_bridgeAdapter;\n  std::shared_ptr<const facebook::react::ReactNativeConfig> _reactNativeConfig;\n  facebook::react::ContextContainer::Shared _contextContainer;\n}\n@end\n#endif\n\n@implementation AppDelegate\n\n- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions\n{\n  RCTAppSetupPrepareApp(application);\n  // RCTEnableTurboModule(YES);\n  RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:launchOptions];\n\n#if RCT_NEW_ARCH_ENABLED\n  _contextContainer = std::make_shared<facebook::react::ContextContainer const>();\n  _reactNativeConfig = std::make_shared<facebook::react::EmptyReactNativeConfig const>();\n  _contextContainer->insert("ReactNativeConfig", _reactNativeConfig);\n  _bridgeAdapter = [[RCTSurfacePresenterBridgeAdapter alloc] initWithBridge:bridge contextContainer:_contextContainer];\n …
Run Code Online (Sandbox Code Playgroud)

objective-c++ ios react-native

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

跟踪所有Objective-C的alloc/allocWithZone/dealloc

很抱歉有很长的描述,但问题并不那么容易......

我的项目没有GC编写.最近我发现了一个我无法找到的内存泄漏.我没有使用新的Xcode Analyzer.我确实逐行阅读了我的代码并验证了所有的alloc/release/copy/autorelease/mutableCopy/retain和pool ... - 仍然没有.

序言:标准仪器和全方位泄漏检查不通过某种原因,我的工作(10min为单位工具拒绝我的应用程序,Instruments.app(泄漏)吃了太多的内存和CPU,所以我就没有机会使用它).

因此,我想编写并使用我自己的代码来挂钩和跟踪"所有"alloc/allocWithZone:/ dealloc消息统计信息,以编写一些简单的自己的泄漏检查库(主要目标只是标记具有可能泄漏的对象的类名).

我使用的主要挂钩技术:

  Method originalAllocWithZone = class_getClassMethod([NSObject class],@selector(allocWithZone:));
  if (originalAllocWithZone)
  {
   imp_azo = (t_impAZOriginal)method_getImplementation(originalAllocWithZone);
   if (imp_azo)
   {
    Method hookedAllocWithZone = class_getClassMethod([NSObject class],@selector(hookedAllocWithZone:));
    if (hookedAllocWithZone)
    {
     method_setImplementation(originalAllocWithZone,method_getImplementation(hookedAllocWithZone));
     fprintf(stderr,"Leaks Hook: allocWithZone: ; Installed\n");
    }
   }
  }
Run Code Online (Sandbox Code Playgroud)
  • 像这样的代码用于挂接alloc方法,而dealloc用作NSObject类别方法.

我保存IMP用于以前的方法实现,然后注册并计算所有alloc/allocWithZone:调用为increment(+ 1)stat-array NSInteger值,dealloc调用为减量(-1).

作为终点,我调用前面的实现并返回值.

在概念上一切正常.

如果需要,我甚至可以检测类何时是类集群的一部分(如NSString,NSPathStore2; NSDate,__ NSCFDate)......通过一些规范化函数(但对于下面描述的问题无关紧要).

但是这种技术存在一些问题:

  • 并非所有类都可以被捕获,例如,[NSDate date]没有捕获alloc/allocWithZone:但是,我可以在GDB中看到alloc调用
  • 由于我正在尝试使用自动单例检测技术(基于retainCount readind)从最终统计信息中自动排除某些对象,因此在启动完整Cocoa应用程序时,NSLocale创建会在pre-init阶段冻结(实际上,即使是简单的Objective-C命令行也是如此)包含Foundation框架的实用程序在main()之前有一些额外的初始化 - 由GDB有allocWithZone:一个接一个地调用,....

完整概念 - 项目草案来源上传到这里:http://unclemif.com/external/DILeak.zip(3.5 Kb)

Terminal.app运行make来编译它,运行./concept以显示它的运行情况.


一个问题:为什么我不能通过挂钩alloc和allocWithZone:方法来捕获所有对象分配?

第二个问题:为什么迷上allocWithZone:在CFGetRetainCount(或[研究所retainCount])冻结了一些类...

memory cocoa memory-leaks objective-c objective-c++

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

box2d,是否可以冻结身体?

嘿,我想知道是否可以从bodyList()冻结一个物体,然后解冻它.解冻应保留其所有的惯性,以便它们沿着它们的路径继续,如果它们好像从未冻结过......

基本上我使用b-> SetType(b2_staticBody)和b-> SetType(b2_dynamicBody).

但这会产生一个巨大的问题,因为它会重置所有原始惯性值.

千万谢谢,
奥利弗.

objective-c objective-c++ box2d cocos2d-iphone

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