小编psh*_*hah的帖子

使用ARC从NSInvocation获取块参数

我试图从NSProxy的forwardInvocation中的NSInvocation获取块参数:这是正确的语法吗?它会泄漏内存吗?

typedef void(^SuccessBlock)(id object);
void *successBlockPointer;
[invocation getArgument:&successBlockPointer atIndex:index];
SuccessBlock successBlock = (__bridge SuccessBlock)successBlockPointer;
Run Code Online (Sandbox Code Playgroud)

或者我应该使用?

typedef void(^SuccessBlock)(id object);
SuccessBlock successBlock;
[invocation getArgument:&successBlock atIndex:index];
Run Code Online (Sandbox Code Playgroud)

那些像对象一样的其他参数类型呢?

__unsafe_unretained id myObject = nil; // I don't think this could be __weak? Is that correct?
[invocation getArgument:&myObject atIndex:index];
Run Code Online (Sandbox Code Playgroud)

我是否必须做其他事情以正确释放分配的内存?

提前致谢.

message-forwarding nsinvocation ios automatic-ref-counting

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

不能与以前的'type-name'声明说明符结合使用

我的iOS应用程序正在运行,突然间我看到了这个错误:"无法与之前的'type-name'声明说明符结合使用".关于什么可能导致此错误的任何想法?

#import "SalesAPIManager.h"

@interface SalesDelegate : NSObject { // error points to this line
    __unsafe_unretained id<SalesAPIManagerDelegate> delegate_;
}


@property (unsafe_unretained, nonatomic) id<SalesAPIManagerDelegate> delegate;


- (id)initWithDelegate:(id<SalesAPIManagerDelegate>)delegate;


@end
Run Code Online (Sandbox Code Playgroud)

objective-c ios

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

tesseract 3.00多线程?

我读了一些其他帖子,建议他们在3.00中添加多线程支持.但我不确定它是否在3.00发布时添加.

除了多线程之外,运行多个tesseract进程是实现并发的可行选择吗?

谢谢.

multithreading tesseract

9
推荐指数
2
解决办法
7673
查看次数

在伞头中包含-Swift.h

我有一个混合的Swift和Objective-C项目.要在Objective-C中访问Swift公共API,API使用者当前必须导入"MyModule-Swift.h".我已经有一个名为"MyModule.h"的Objective-C伞形标题.但是,导入"MyModule.h"不适用于Swift API.我尝试在伞标题中导入"MyModule-Swift.h",但它没有找到它(我假设它是由Xcode动态生成的).

任何建议,以便API使用者可以始终导入"MyModule.h"以使用用Swift/Objective-C编写的公共API将非常感激.

====================================================================

编辑:我为没有花时间正确构建问题而道歉.我有一个名为的框架MyModule.

我有一个Objective-C类叫ABUser,

@interface ABUser: NSObject

- (void)walk;

@end
Run Code Online (Sandbox Code Playgroud)

我想使用Swift为这个类添加新的行为,所以我定义了一个扩展

extension ABUser {

func swiftWalk()

}
Run Code Online (Sandbox Code Playgroud)

现在,假设我想访问Objective-C应用程序swiftWalk定义的方法ABUser,我必须这样做#import <MyModule/MyModule-Swift.h>.#import <MyModule/MyModule.h>如果我想使用该walk方法将会工作.这是假设伞头MyModule.h导入ABUser.h.

我一直想要Objective-C应用程序,#import <MyModule/MyModule.h>并且永远不必担心API是在框架中用Objective-C还是Swift编写的.所以,我尝试导入MyModule-Swift.h伞头MyModule.h.但是,如果这样做,我的Objective-C应用程序无法编译.不确定,如果这是因为MyModule-Swift.hXcode在构建过程中即时生成.

编辑2:添加了一个示例项目来重现此问题:https://github.com/priteshshah1983/MyObjectiveCApp

相关代码在ViewController.m.构建将因master分支而失败.为了使它工作,检查working分支.

objective-c ios swift

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

带块参数的NSInvocation

我正在尝试将块参数传递给a NSInvocation,但应用程序崩溃了.调用发出网络请求并调用成功或失败块.我认为问题是在网络请求完成之前会释放块.我设法让它与一些Block_copyhackery 一起工作,它没有使用Instruments报告任何泄漏.

问题: - 即使静态分析仪或仪器没有报告,泄漏是否可能存在? - 有没有更好的方法来"保留"该区块?

// Create the NSInvocation
NSMethodSignature *methodSignature = [target methodSignatureForSelector:selector];
NSInvocation* invoc = [NSInvocation invocationWithMethodSignature:methodSignature];
[invoc setTarget:target];
[invoc setSelector:selector];

// Create success and error blocks.
void (^successBlock)(id successResponse) = ^(id successResponse) {
    // Some success code here ...
};

void (^errorBlock)(NSError *error) = ^(NSError *error) {
    // Some failure code here ...
};

/*
Without the two Block_copy lines, the block gets dealloced too soon
and the app crashes with …
Run Code Online (Sandbox Code Playgroud)

dealloc nsinvocation ios objective-c-blocks

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

关于 didRegisterForRemoteNotificationsWithDeviceToken 的任何通知?

当 didRegisterForRemoteNotificationsWithDeviceToken 被调用时,iOS 是否触发 NSNotification(包含 deviceToken)?

我知道我总是可以从 AppDelegate 中将令牌保存在 NSUserDefaults 中并在任何地方访问它,但我想知道是否有更好的方法。我在想一些类似 UIApplicationDidEnterBackgroundNotification 的东西。

更新:如果我想获取设备令牌而不在 AppDelegate 中实现该委托方法的用例。

nsnotifications nsnotificationcenter ios

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

在QML Webview中使用相对URL

我正在尝试使用QML(main.qml)来加载本地HTML文件index.html, url: "file:///../../htmlfiles/index.html" 但它不起作用.

你能帮忙吗?

url qt relative-path webview qml

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