我一直在使用来自Raphael Cruzeiro的PDF Annotator的代码,并且发现了许多内存泄漏(ARC已关闭,并将保留以支持旧设备).在修补了大部分内容之后,我对最后一对来说,他们让我难过.因此,在一个叫做类PDFDocument,他的属性了CGPDFPageRef,CGPDFDocument和一个自定义的注释类@synthesize"d.我不得不用释放来消除他的dealloc方法并消除一些悬空指针,除了一个小问题之外它很有效:在大约3个完整的保留 - 释放周期之后,它在@synthesize行崩溃了他的注释对象......我已经从未见过SIGABRT,因为在@synthesize期间发送了一个解除分配的对象,所以自然不知道如何修复它.如果我删除dealloc中的释放代码,它会泄漏,但是如果我将其保留,它就会崩溃.这是PDFDocument类的代码:
//.h
#import <Foundation/Foundation.h>
@class Annotation;
@interface PDFDocument : NSObject {
Annotation *_annotation;
}
- (id)initWithDocument:(NSString *)documentPath;
- (NSInteger) pageCount;
- (void) loadPage:(NSInteger)number;
- (BOOL)save;
@property (nonatomic, retain) NSString *name;
@property (nonatomic, retain) NSString *hash;
@property (readwrite, nonatomic, assign) CGPDFDocumentRef document;
@property (readwrite, nonatomic, assign) CGPDFPageRef page;
@property (nonatomic, retain) NSString *version;
@property (nonatomic, assign) BOOL dirty;
@property (nonatomic, retain) Annotation *annotation;
@end
//.m
#import "PDFDocument.h" …Run Code Online (Sandbox Code Playgroud) 因为iPad 3("新iPad")拥有两倍的像素,我不经意地让我的任何图像的两倍大.但我的问题是,因为它有两倍的像素,如果我手动放置在屏幕上的一个对象,说CGRectMake,它会出现在iPad2的距离iPad3的不同的地方?
说我正在使用下面的代码在屏幕上定位按钮:
CGRectMake(375,500,125,125);
Run Code Online (Sandbox Code Playgroud)
由于iPad3的像素数是原来的两倍,因此它在X坐标上位于375像素不会出现在iPad 2与iPad3的不同位置?
我敢肯定,这是一个愚蠢的问题,任何有经验的iOS开发人员都会嘲笑,但由于简单的谷歌搜索没有改变任何东西,我想id问.
谢谢!
-Shredder2794
在我继续之前,我想在这篇文章的序言中说这可能是最讨厌,彻头彻尾的邪恶,令人讨厌的话题,所以我不希望任何答案都包含"合法"代码.
在尝试访问OS X Mountain Lion用于包含热键组合以激活听写的内部首选项文件时,我遇到了一些精美的有符号整数,其中包含System Preferences.app中定义的键代码.问题是,我能想到把它们变成a的唯一方法CGEvent是通过并基本解析出给定密钥代码的位掩码,这是一种潜在的无结果和烦人的努力.而且因为CGEvent方便地为内部struct(__CGEvent)定义了类型,所以没有办法看到它的内部组织(换句话说,我malloc()无法解决这个问题).到目前为止我所获得的是以下代码:
/***************************************UNSAFE*****************************************************/
//1048584, -1048585 - Two Left CMD presses; 1048576, -1048577 - Two CMD presses; 8388608, -8388609 - Two Fn presses; 1048592, -1048593 - Two Right CMD presses
- (void)forceDictation {
NSString *path = [[NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) lastObject]stringByAppendingPathComponent:@"Preferences/com.apple.symbolichotkeys.plist"];
NSDictionary *dictationPrefs = [NSDictionary dictionaryWithContentsOfFile:path];
NSDictionary *dictationDict = dictationPrefs[@"AppleSymbolicHotKeys"];
NSDictionary *keyvalueDict = dictationDict[@"164"];
NSDictionary *valueDict = keyvalueDict[@"value"];
NSArray *parameters = valueDict[@"parameters"];
NSInteger firstCode = [[parameters objectAtIndex:0]longLongValue];
NSInteger secondCode = …Run Code Online (Sandbox Code Playgroud) 我知道上面提到的用于舍入浮点值和双精度值。但是有人可以解释一下每个值是如何舍入的吗?我找不到任何相关文档。
所以,当我为我的下一个应用程序更新编写一些代码时,我注意到一些奇怪的事情:你可以在Objective-C语句的末尾加上大量的分号,它会编译得很好!哎呀,它的运行方式也一样.为什么这个世界有效呢?
在启动我的程序时,我会触发第二个线程来完成一些后台工作.这个线程永远不会死,但我需要等待它完成它正在做的事情才允许主线程继续.
在等待第二个线程更新它的状态时,如何阻止和恢复主线程?
如何将参数从一个ViewController传递到另一个(我在故事板中定义了ViewControllers)?putExtra在Android或任何Bundle中是否有类似的值来放置值?我需要从第一个ViewController读取一些值并传递给另一个要发出POST请求的值.