Tag: 内存pipe理

应用程序:didFinishLaunchingWithOptions:内存pipe理

我有一个关于内存pipe理的问题。 在我的应用程序委托中,我有以下方法; welcomeViewController是一个ivar。 – (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { welcomeViewController = [[CBWelcomeViewController alloc] init]; UINavigationController *appNavigationController = [[UINavigationController alloc] initWithRootViewController:welcomeViewController]; [self.window addSubview: [appNavigationController view]]; [self.window makeKeyAndVisible]; return YES; } 为了释放welcomeViewController的内存,我只需在dealloc方法中调用release就可以了。 – (void)dealloc { [welcomeViewController release]; [window release]; [super dealloc]; } 我的问题是,什么是正确的方式来pipe理appNavigationController的内存?

图像select器显示多个图像像拼贴没有内存问题

我正在使用此ImagePicker从库或相机中select多个图像。 一旦用户完成select图像,我将这些图像存储到一个数组。 我希望根据所选图像的数量来显示图像。 例如,如果select的图像超过5个,则结果将会是所选图像中的类似内容。 Imagepicker对我来说是新的。 我不知道如何做到这一点。 我读过很多文章,但没有弄清楚如何在我的情况下实现。 我在testing项目上testing它, func doneButtonDidPress(_ imagePicker: ImagePickerController, images: [UIImage]) { imagePicker.dismiss(animated: true, completion: nil) imageArray = images createCollage() } func createCollage() { } 如果我使用UIimageView来显示/加载图像,则会显示大量的内存使用情况。 任何人都可以帮助我在这里任何这些问题? 任何帮助都感激不尽!!

内存pipe理与cocoa中的void *上下文有关

有许多基础类允许你提供一个指向void的指针,该指针稍后作为parameter passing给一个callback函数。 例如,对于NSKeyValueObserving的addObserver:forKeyPath:options:context:。 由于指向void的指针可能无法扩展NSObject,因此接受这种参数的函数不能期望保留它。 因此,您的代码必须看起来类似于以下内容: – (void)sharedInit { MyObject *myObject = [[MyObject alloc] init]; [x addObserver:y forKeyPath:@"z" options:0 context:myObject]; // cannot (auto)release myObject here } – (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { MyObject *myObject = (MyObject *)context; [myObject release]; // myObject is released here } 这是有道理的,尽pipe它似乎违反了Cocoa / Objective-C对象所有权的每一个原则。 另外,如果您忘记在这种情况下手动pipe理内存,则经常(虽然不总是)导致EXC_BAD_ACCESS崩溃。 此外,Xcode分析仪抱怨。 我问这个问题的原因是因为我正在编写一个networking连接库,在其公共API中使用相同types的上下文指针。 然而,在我自己的代码中find了一些与手动内存pipe理相关的内存pipe理错误之后,我相信必须有更好的方法。 一个解决scheme是将我的API的上下文参数的types改为(id […]

使用ARC对CGMutablePathRef进行编码和解码

在ARC下,是否可以使用NSCoding对CGMutablePathRef (或其不可变forms)进行编码/解码? 天真地我尝试: path = CGPathCreateMutable(); … [aCoder encodeObject:path] 但是我从编译器中得到一个友好的错误: Automatic Reference Counting Issue: Implicit conversion of an Objective-C pointer to 'CGMutablePathRef' (aka 'struct CGPath *') is disallowed with ARC 我能做些什么来编码?

viewDidUnload不调用alloc / init初始化的viewcontroller没有xib文件

为什么不调用viewDidUnload方法,当我不使用xib和使用alloc / init来初始化我的ViewController时,我通过模拟器模拟任何iOS版本的内存警告? 似乎这个方法从来没有被调用。 如果我通过使用xib文件的alloc / initWithNibName创build控制器,则成功调用viewDidUnload方法。 为什么会发生? xib文件是否需要所有视图控制器正常处理内存警告?

加载UIImagePickerController更快?

我需要加载UIImagePickerController更快。 我的应用程序将从可能的多个控制器调用UIImagePickerController ,并在每个控制器中有两个button,一个用于照片库,另一个用于相机。 这是我的示例应用程序。 我尝试过的一些解决scheme是Apple在“ 并发编程指南 ”中推荐的。 最简单的是当用户按下button时,分配&init实例。 相机出现之前最多可能需要2秒钟的时间。 解决scheme尝试: – (1)我做了一个@property(…)* imagePicker,并在viewDidAppear调用它的alloc&init来使它看起来很stream畅,但是它妨碍了加载其他元素,可能是因为它使用了同一个线程。 在initWithNibName或viewDidLoad使用时会导致较差的结果。 (2) Operation queues …不令人满意的结果。 (3) Dispatch Queues …更好的结果,但仍然明显的波涛汹涌的performance。 (4) performSelectorInBackground:withObject:不是很好的结果。 除非另有build议,否则我不认为我想走向世界。 我没有任何问题,使两个@properties的UIImagePickerController 。 我将继续可能的' 线程编程指南 '。 如果可以的话,请在您的解决scheme中包含任何必要的内存pipe理实践。 谢谢。 – (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; // (1) TRYING OPERATION QUEUES // (a) — NSBlockOperation NSBlockOperation *NSBO_IP = [NSBlockOperation blockOperationWithBlock:^{ NSLog(@"before"); imagePicker = [[UIImagePickerController […]

Xcode应用程序不释放内存

我正在创build一个应用程序,在设备中存储图像(保存为coreData),我有一个问题。 每次我select一个图片添加collectionView时,内存都在100Mb左右增加,而且每增加一次。 我想我加了ARC,(Edit-> refactor-> convert to objective-c ARC ..),添加它似乎没有任何问题,但内存仍然不释放。 这是我的代码,当用户在uiimagepicker中select图像时: – (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { UIImage *chosenImage = info[UIImagePickerControllerOriginalImage]; NSData *imageData = UIImageJPEGRepresentation(chosenImage ,0.2); if (imageData != nil) { AppDelegate *delegate = (AppDelegate *)[UIApplication sharedApplication].delegate; NSString *urlString = [NSString stringWithFormat:@"myurl.."]; NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; [request setURL:[NSURL URLWithString:urlString]]; [request setHTTPMethod:@"POST"]; NSString *boundry = […]

阅读plist文件。 iOS编程

我有这个代码,无法弄清楚我做错了什么。 正如你在下面的代码中可以看到的,我有一个plist文件,名为shifts.plist ,位于我的supporting files夹中。 这是我的plist结构。 NSString *path = [[NSBundle mainBundle] pathForResource:@"shifts" ofType:@"plist"]; dictionary = [[NSMutableDictionary alloc]initWithContentsOfFile:path]; cell.textLabel.text = [secondTableInfo objectAtIndex:indexPath.row]; NSLog(@"%@",[[dictionary objectForKey:@"name"]objectAtIndex:0]); 我最终想读取name条目,并与他们填充一个UITableView 。 我用NSLog输出dictionary ,我得到了以下。 所以文件就在那里,只是解决,我错了。 谢谢, 山姆

NSCache – 标记对象不可移动

当用户通过菜单在视图控制器之间切换时,如果他有足够的内存,我想caching它们。 为了做到这一点,我想使用NSCache来存储许多UIViewControllers 。 但是,我不知道我怎么可以告诉NSCache目前使用的对象,不应该被删除。 例如,当我运行应用程序,加载很less的视图控制器,并退出应用程序, NSCache自动删除所有viewControllers (这是有道理的 – 应用程序将能够保持在前台较长时间)。 但是,它也删除了当前显示的视图控制器,这不是我想要的。 我怎样才能标记特定的对象不可移动?

获取iOS应用程序使用的实际数量的OpenGL纹理内存

SO中有几个类似于这个的问题,但是他们没有一个能够解释在设备上获取iOS应用程序使用的实际OpenGL纹理内存的确定方法。 我知道如何手动计算上传到OpenGL时我的纹理将使用多less内存。 我想知道如果我可以从设备中获得确切的OpenGL使用的内存量。 我想避免看看仪器上的内存监视器小部件中的真实内存和虚拟内存列(我的理解是这些聚合纹理内存和应用程序的正常内存)。 我认为这与这里或这里显示的方法类似。 我不介意是否使用任何外部工具或以编程方式获取纹理内存。 但是我只想要设备报告的真正的OpenGL内存,而不是聚合。 另外,有人可以解释什么'虚拟内存'专栏准确地意味着在iOS? 我想我理解虚拟内存的概念,但是我想弄清楚虚拟内存列是否也与iOS低内存警告相关,或者只与Real Memory列有关。