Problème lié à la memory de ZBarReaderViewController dans iOS 7

J'utilise ZBarReaderViewController pour scanner le code QR. et il a été parfaitement travaillé sur iOS 6. Mais quand j'utilise iOS 7 avec mon projet alors il ne fonctionne pas correctement avec ZBarReaderViewController

Le problème est lié à la memory, il faut plus de 100 Mo et mon appareil est bloqué en ce moment.

Généralement dans mon projet. l'user peut scanner l'image QR Generator et j'ai une fonction qui reconnaît le code du QR code est lié à ma string que j'ai reçu du server alors si OUI alors je passe au controller de vue suivant sinon restr dans l'écran actuel (continuer QR SCAN).

Si le code QR mach avec ma string puis sur l'écran suivant a "annuler" button qui fait scanner un autre code (cela signifie que je suis à la vue précédenteController (QR SCAN) ).

A ce moment-là, quand je vais au prochain viewController et que je reviens à l'écran perméable (QR Scan), à chaque fois que je ZBarReaderViewController problème lié à la memory (peut-être) est généré.

mais j'écris du code

 if(self.ZBarReaderVC) { for(UIView *subVies in self.ZBarReaderVC.cameraOverlayView.subviews) [subVies removeFromSuperview]; for(UIView *subVies in self.ZBarReaderVC.view.subviews) [subVies removeFromSuperview]; [self.ZBarReaderVC removeFromParentViewController]; self.ZBarReaderVC = nil; } 

après [self.ZBarReaderVC dismissModalViewControllerAnimated: YES]; Je supprime ZBarReaderViewController à la fin, alors pourquoi chaque fois que je ZBarReaderViewController suis alloué ZBarReaderViewController ???

Et aussi j'ai mis [self.ZBarReaderVC.readerView stop]; avant de rejeter ZBarReaderViewController arrêter l'parsing du stream de lecteur, mais aussi cela n'a pas fonctionné pour moi.

Mais j'ai essayé de résoudre mon problème au sujet des heures de time mais je ne suis pas capable de résoudre mon problème

Aidez-moi, s'il vous plaît.

Alos j'ai trouvé le même problème

Zbar SDK et ios7 / xcode 5 – App atteint 100% de l'utilisation du processeur et de la memory de plus de 100 Mo

http://sourceforge.net/p/zbar/discussion/1072195/thread/df4c215a/

Mais personne ne peut m'aider.

J'ai trouvé que dans iOS 7 problème est survenu à

 self.ZBarReaderVC.view.frame = self.view.bounds; 

Je mets le sharepoint rupture ici et vérifie chaque fois que je viens cuire du viewController précédent, son prendre plus de time et aussi la memory (question) à ce code.

Donc d'abord j'ai besoin d'enlever la vue de self.ZBarReaderVC avec toutes ses sous-visualisations .. donc au début j'ai besoin d'écrire

 if(self.ZBarReaderVC) // first check `self.ZBarReaderVC` is created or not? { [self.ZBarReaderVC.readerView stop]; // then stop continue scanning stream of "self.ZBarReaderVC" for(UIView *subViews in self.ZBarReaderVC.view.subviews) // remove all subviews [subViews removeFromSuperview]; [self.ZBarReaderVC.view removeFromSuperview]; self.ZBarReaderVC.view = nil; } 

Et aussi je l'ai eu dans iOS 7 self.ZBarReaderVC a restr continuer de balayage stream de QR Code donc chaque fois que nous devons l' arrêter chaque fois que votre balayage de code QR est fait et vous devez rejeter votre self.ZBarReaderVC puis premier arrêt de la numérisation par [self.ZBarReaderVC.readerView stop];

Et un certain time l'user a besoin d'écrire / appeler (pour faire / implémenter un certain type de fonctionnalités supplémentaires)

 [self.ZBarReaderVC viewDidLoad]; [self.ZBarReaderVC viewWillAppear:NO]; [self.ZBarReaderVC viewDidAppear:NO]; 

Méthodes de self.ZBarReaderVC alors il n'est pas nécessaire d'utiliser dans iOS 7 , donc si n'importe quel user qui appelle ces methods de self.ZBarReaderVC alors s'il vous plaît le mettre en commentaire.

J'espère que ma suggestion est utile pour les autres. Merci 🙂

Si vous ciblez votre application pour iOS7 uniquement, j'ai abandonné le composant ZBar et utilisé la méthode native AVFoundation, faisant du viewcontroller un AVCaptureMetadataOutputObjectsDelegate. Fonctionne parfaitement avec 3% d'utilisation du processeur:

viewcontroller.h:

 @interface viewcontroller : UIViewController <AVCaptureMetadataOutputObjectsDelegate> { AVCaptureSession *_session; AVCaptureDevice *_device; AVCaptureDeviceInput *_input; AVCaptureMetadataOutput *_output; AVCaptureVideoPreviewLayer *_prevLayer; UIView *_highlightView; } 

viewcontroller.m

 - (IBAction)btnScan:(id)sender { _session = [[AVCaptureSession alloc] init]; _device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; NSError *error = nil; _input = [AVCaptureDeviceInput deviceInputWithDevice:_device error:&error]; if (_input) { [_session addInput:_input]; } else { NSLog(@"Error: %@", error); } _output = [[AVCaptureMetadataOutput alloc] init]; [_output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()]; [_session addOutput:_output]; _output.metadataObjectTypes = [_output availableMetadataObjectTypes]; _prevLayer = [AVCaptureVideoPreviewLayer layerWithSession:_session]; _prevLayer.frame = self.view.bounds; _prevLayer.videoGravity = AVLayerVideoGravityResizeAspectFill; [self.view.layer addSublayer:_prevLayer]; [_session startRunning]; } - (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection { AVMetadataMachineReadableCodeObject *barCodeObject; NSSsortingng *detectionSsortingng = nil; NSArray *barCodeTypes = @[AVMetadataObjectTypeCode39Code, AVMetadataObjectTypeCode128Code, AVMetadataObjectTypeQRCode]; for (AVMetadataObject *metadata in metadataObjects) { for (NSSsortingng *type in barCodeTypes) { if ([metadata.type isEqualToSsortingng:type]) { barCodeObject = (AVMetadataMachineReadableCodeObject *) [_prevLayer transformedMetadataObjectForMetadataObject: (AVMetadataMachineReadableCodeObject *)metadata]; detectionSsortingng = [(AVMetadataMachineReadableCodeObject *)metadata ssortingngValue]; break; } } if (detectionSsortingng != nil) { NSLog(@"%@", detectionSsortingng); [self buscarCarga:detectionSsortingng]; //Do whatever you want with the data [_session stopRunning]; AVCaptureInput* input = [_session.inputs objectAtIndex:0]; [_session removeInput:input]; AVCaptureVideoDataOutput* output = (AVCaptureVideoDataOutput*)[_session.outputs objectAtIndex:0]; [_session removeOutput:output]; [_prevLayer removeFromSuperlayer]; } else NSLog(@"No data"); } } 
 - (void)viewDidLoad { [super viewDidLoad]; self.ZBarReaderVC = [ZBarReaderViewController new]; self.ZBarReaderVC.readerDelegate=self; self.ZBarReaderVC.supportedOrientationsMask = ZBarOrientationMaskAll; ZBarImageScanner *scanner = self.ZBarReaderVC.scanner; [scanner setSymbology: ZBAR_I25 config: ZBAR_CFG_ENABLE to: 0]; } #pragma mark - Button click method - (IBAction)startScanning:(id)sender { NSLog(@"Scanning.."); resultTextView.text = @"Scanning.."; [self presentViewController:self.ZBarReaderVC animated:YES completion:nil]; }