Tag: 内存pipe理

自我毁灭单身devise模式iOS

我最近遇到了一个问题,我只想要一个特定对象的实例存在,只存在一个短暂的时间内执行特定的操作。 它的操作是asynchronous的,所以如果我没有引用它,ARC会在运行循环结束时将其解除分配。 如果我坚持下去,我会需要委托callback或通知来知道什么时候发布它。 该对象需要下载几个图像和其他数据并将其caching到磁盘。 我不希望它浪费内存,因为caching限制大约是24小时。 我也不需要任何反馈; 我希望它能够完成它的任务,并且自己完成。 我想出了一个我很喜欢的devise模式。 从那时起,我就在其他一些项目中使用过它,并且如果它是一个众所周知和分析的模式,我只是不知道(自毁单身)。 我想知道,所以我可以意识到我目前没有看到任何潜在的陷阱。 我也很感兴趣,听到你们可能有什么关于为什么这是一个糟糕的devise的input。 devise就像这样(这是ARC,但如果通过类方法释放单例,非弧也可以工作): 一个全局的静态对象(不是真正的单身人士,因为它不是整个时间) static MySelfDestructingClass* singleton; 单一的公共类方法 + (void)downloadAndCacheDataIfNeeded { //Force synchronized access @synchronized(singleton){ //We are already doing something, return if(singleton){ return; } NSDate* lastCacheDate = [[NSUserDefaults standardDefaults] objectForKey:kKeyForLastUpdate]; if([[NSDate date] timeIntervalSinceDate:lastCacheDate] > kCacheLimit){ //Our cache is out of date, we need to update singleton […]

如何停用Google跟踪代码pipe理器控制台日志

将Google跟踪代码pipe理器添加到项目后,我在控制台中看到了大量日志条目。 有没有办法禁用它? 控制台日志充满了噪音: GoogleTagManager info: Processing logged event: _vs with parameters: { "_o" = auto; "_pc" = UIViewController; "_pi" = "-3988739357756819671"; "_sc" = "Bubbie.MamboBamboViewController"; "_si" = "-3988739357756819670"; } 2017-07-27 12:01:09.744 BubbieHuff[77205:6894827] GoogleTagManager info: Processing logged event: show_view with parameters: { "_sc" = "Bubbie.MamboBamboViewController"; "_si" = "-3988739357756819670"; name = Mambo; }

为什么使用4 MB的内存警告和320 MB的空闲空间?

我正在运行附加到Xcode 5.1.1的iOS 7.1的iPhone 4上进行testing。 我不明白为什么当仪器显示我的应用程序只使用几兆字节,并有大量的内存空闲(见附件),我得到内存警告,甚至崩溃。 有任何想法吗? 更新: 在仪器中,正如我怀疑的那样,我发现没有泄漏,但“匿名虚拟机”的大小似乎过大,充满了图像数据。 我应用程序中的每个表格单元都显示一个JPEG。 也许我应该预先缩放这些图像,这是大匿名虚拟机大小的原因…更多的调查要做。

我负责释放一个UIView的gestureRecognizers在dealloc?

我已经将UIGestureRecognizer附加到UIView。 在dealloc期间释放这个是谁的责任? 特别: UITapGestureRecognizer *t = [[UITapGestureRecognizer alloc] initWithTarget:self.view action:@selector(tapHandler:)]; [self.view addGestureRecognizer:t]; [t release]; 所以,self.view目前只有gestureRecognizer保留。 更新我应该更清楚。 我的问题与视图dealloc方法有关。 当视图被释放时,视图的超类是否处理了gestureRecognizer的释放。 我目前认为是这样。

在Xcode中组织不同版本的应用程序

我正在开发一个可以编辑图像的iPhone应用程序。 最终,我想要一个小版本,允许用户简单地编辑他们的图像,以及允许图像的社交networking的大版本。 然后我想为iPad开发一个版本。 因为这是我第一次进入商业移动开发领域,所以我对如何在Xcode中组织所有这些版本感到困惑。 显然,每个版本之间都会有文件重用。 我想我的问题是,我怎样才能以最有效的方式组织这些单独的项目,以便共享文件,因此当我编辑共享的特定文件时,会对每个版本的应用程序进行更改? 在XCode中是否存在某种构造? 有没有关于如何去做的链接或文学? (不确定正确的术语来search它)。

如何保持内存中的variables,直到应用程序退出

我在iOS中有一个单例对象,在实例化时parsing一个CSV文件,然后保存结果。 我想使这个对象普遍可访问,我希望它不会从内存中释放,直到应用程序退出。 我正在运行ARC,所以我不能手动保留。 有没有办法可以做到这一点,所以它会与ARC工作? 头文件: #import <Foundation/Foundation.h> #import "CHCSV.h" #import "RCParserObject.h" @interface ParserStore : NSObject <CHCSVParserDelegate> { // CSV Variables RCParserObject *item; NSMutableArray *data; NSMutableArray *parsedData; int fields; bool open; } @property (atomic, retain) RCParserObject *item; @property (atomic, retain) NSMutableArray *data; @property (atomic, retain) NSMutableArray *parsedData; @property (atomic) int fields; @property (atomic) bool open; + […]

有没有人得到地址 – 消毒剂(称为asan或-fsanitize =地址)的iOS?

Address-Sanitizer https://code.google.com/p/address-sanitizer/wiki/AddressSanitizer 我已经编译了我自己的llvm(相当直接的编译),因为苹果的llvm不支持这个function。 我已经testing了mac命令行程序的铿锵声,它的工作原理(但没有显示源代码行)。 对于iOS,还是有一些问题: 编译模拟器版本:预编译头文件报告错误: 在/Users/fluke/Documents/projects/tmp/testAsanNoARC/testAsanNoARC/testAsanNoARC-Prefix.pch:12中包含的文件中:从/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/包含的文件中SDKs / iPhoneSimulator6.1.sdk / System / Library / Frameworks / UIKit.framework / Headers / UIKit.h:9:/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.1 (UIAccelerometer *)加速度计didAccelerate :() UIAcceleration *)加速NS_DEPRECATED_IOS(2_0,5_0); ^ /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.1.sdk/System/Library/Frameworks/UIKit.framework/Headers/UIAccelerometer.h:33:12:note:声明已明确标记为不可用@interface UIAccelerometer:NSObject {^ /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.1.sdk/System/Library/Frameworks/UIKit.framework /Headers/UIAccelerometer.h:53:71:error:'UIAcceleration'is unavailable:not available on OS X – (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration NS_DEPRECATED_IOS(2_0,5_0); … 编译为设备版本,它报告缺乏libarc(但实际上我不启用ARC) ld:找不到文件:/Users/fluke/Documents/tools/asan/Debug+Asserts/lib/arc/libarclite_iphoneos.a clang:error:linker命令失败,退出代码1(使用-v查看调用) 所以我尝试使用它作为一个单独的库 – 只是新的lib目标,并使用我自己的铛,而主要目标仍然使用苹果的llvm。 该程序编译(可能需要链接到build立llvm的asan dylib),但不工作,因为我需要在我们的程序入口之前加载。 谁有这样做的经验?

Objective-C – 优化这个单例模式?

我发现网上的单身模式。 在我看来,它有很多可以优化的东西。 在sharedMySingleton方法中,不需要调用retain? 我不确定… – 如果不是,为什么在allocWithZone有一个保留? – 什么是@synchronized的使用。 NSAssert认为块可以被调用多次,所以如果是的话,应该有更多的代码释放以前的内存,或者没有NSAsserting清除退出块,如果没有,为什么有这个NSAssert? – 链接sharedMySingleton和sharedMySingleton似乎很奇怪。 我写了自己的东西: +(MySingleton*)sharedMySingleton { @synchronized([MySingleton class]) { if (_sharedMySingleton == nil) _sharedMySingleton = [[self alloc] init]; return _sharedMySingleton; } return nil; } +(id)alloc { @synchronized([MySingleton class]) { return [super alloc]; } return nil; } 单身模式 #import "MySingleton.h" @implementation MySingleton // ########################################################################################################## // ######################################## SINGLETON PART […]

NSAutoreleasePool。 什么时候适合创build一个新的自动释放池?

在iOS / CocoaTouch上,我经常看到代码在一个方法中创build一个新的NSAutoreleasePool实例。 我最近看到一个在NSOperation内。 设置NSAutoreleasePool的新实例的基本规则是什么? 为什么这样做比单纯依靠在main.m中创build的预先存在的发布池更好? 谢谢, 道格

Objective C UIImagePNGRepresentation内存问题(使用ARC)

我有一个基于ARC的应用程序,从Web服务加载大约2000个相当大(1-4MB)的Base64编码图像。 它将Base64解码的string转换为.png图像文件并将其保存到磁盘。 这一切都在一个循环,我不应该有任何挥之不去的引用。 我分析了我的应用程序,发现UIImagePNGRepresentation占用了大约50%的可用内存。 我看到它的方式,UIImagePNGRepresentationcaching它创build的图像。 解决这个问题的一个方法是刷新caching。 任何想法如何可以做到这一点? 另一种解决scheme是使用UIImagePNGRepresentation以外的东西? 我已经试过这个没有运气: 使用UIImagePNGRepresentation内存问题 。 更何况,我不能真正使用那里提供的解决scheme,因为它会使我的应用程序太慢。 这是我从我的循环调用的方法。 UIImage是从Base64转换的图像: + (void)saveImage:(UIImage*)image:(NSString*)imageName:(NSString*)directory { NSData *imageData = UIImagePNGRepresentation(image); //convert image into .png format. NSFileManager *fileManager = [NSFileManager defaultManager]; NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); //create an array and store result of our search for the documents directory in it NSString *documentsDirectory = […]