Когда автовыпуск на самом деле вызывает выпуск в Касании Какао?

Я предполагаю, что вы получаете typeError, потому что

driver.find_element_by_xpath() 

возвращает WebElement, который по какой-либо причине не может быть преобразован в логическое значение для ваших операторов if. Попробуйте переключиться на

driver.find_elements_by_xpath()

. Этот метод все равно будет работать, даже если найден только один элемент, он просто возвращает массив, содержащий этот элемент. Это важно, потому что python может видеть массив длины 1+ (если найден один или несколько элементов) и преобразовывать его в логическое значение как true.

11
задан Josh Caswell 27 July 2013 в 19:38
поделиться

5 ответов

Пул автовыпуска обычно выпускается после каждого повторения цикла выполнения. Примерно, каждое Сенсорное приложение Какао и Какао структурировано как это:

Get the next message out of the queue
Create an autorelease pool
Dispatch the message (this is where your application does its work)
Drain the autorelease pool

То, что Вы описываете, является ожидаемым поведением. Если Вы хотите иметь в наличии объект еще, чем который, необходимо будет явно сохранить его.

21
ответ дан 3 December 2019 в 01:29
поделиться

Используя autorelease способ сказать, "Объект, я больше не хочу Вас, но я собираюсь передать Вас кому-то еще, кто мог бы хотеть Вас, просто еще не исчезайте". Таким образом, объект будет слоняться поблизости достаточно долго, чтобы Вы возвратили его из метода, или дайте его другому объекту. Когда некоторый код хочет иметь в наличии объект, он должен требовать владения retainлуг это.

См. инструкции по управлению памятью для всего, что необходимо знать для использования autorelease правильно.

13
ответ дан 3 December 2019 в 01:29
поделиться

Вот пример, обеспеченный в документе управления памятью Apple:

– (id)findMatchingObject:(id)anObject 
{ 
    id match = nil; 
    while (match == nil) { 
        NSAutoreleasePool *subPool = [[NSAutoreleasePool alloc] init]; 
        /* Do a search that creates a lot of temporary objects. */ 
        match = [self expensiveSearchForObject:anObject]; 
        if (match != nil) { 
            [match retain]; /* Keep match around. */ 
        } 
        [subPool release]; 
    } 
    return [match autorelease];   /* Let match go and return it. */ 
}
3
ответ дан 3 December 2019 в 01:29
поделиться

Только гарантируется, что автовыпущенные объекты будут выпущены после конца Вашего метода. В конце концов, метод, который названный Вашим методом, возможно, создал его собственный пул и выпускать его прямо после Вашего метода.

1
ответ дан 3 December 2019 в 01:29
поделиться

Да, это - лучший подход. Автовыпуск действительно только предназначается для взаимодействий в коде, что Вы знаете. После того как Вы храните объект, необходимо или знать, что объект, который содержит ссылку, не умрет/выйдет объем, пока Вы не будете также сделаны с объектом, или необходимо сохранить объект.

2
ответ дан 3 December 2019 в 01:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: