Этот код работает для меня. Это то, что вы пытаетесь сделать?
<input type="file" style="position:absolute;left:-999px;" id="fileinput" />
<button id="addfiles" >Add files</button>
<script language="javascript" type="text/javascript">
$("#addfiles").click(function(){
$("#fileinput").click();
});
</script>
Я думал, что добавлю несколько конкретных примеров специально для контроллера представления. Многие из объяснений, не только здесь о переполнении стека, действительно хороши, но я лучше работаю с примерами из реального мира (у @drewag было хорошее начало для этого):
weak
, потому что они долгоживущие. Контроллер представления может закрыться до завершения запроса, поэтому self
больше не указывает на действительный объект при вызове замыкания. Если у вас есть замыкание, которое обрабатывает событие на кнопке. Это может быть unowned
, потому что как только контроллер вида уходит, кнопка и любые другие элементы, на которые он может ссылаться из self
, одновременно исчезают. Закрывающий блок также исчезнет одновременно.
class MyViewController: UIViewController {
@IBOutlet weak var myButton: UIButton!
let networkManager = NetworkManager()
let buttonPressClosure: () -> Void // closure must be held in this class.
override func viewDidLoad() {
// use unowned here
buttonPressClosure = { [unowned self] in
self.changeDisplayViewMode() // won't happen after vc closes.
}
// use weak here
networkManager.fetch(query: query) { [weak self] (results, error) in
self?.updateUI() // could be called any time after vc closes
}
}
@IBAction func buttonPress(self: Any) {
buttonPressClosure()
}
// rest of class below.
}
Если ничего из вышеперечисленного не имеет смысла:
tl; dr
Так же, как
implicitly unwrapped optional
, если вы можете гарантировать , что ссылка не будет равна нулю в точке ее использования, используйте неизвестную. Если нет, то вы должны использовать слабый.
Объяснение:
Ниже я нашел следующее: слабая ссылка без связи . Исходя из того, что я понял, непризнанное «я» не может быть равным нулю, но слабое «я» может быть, а непризнанное «я» может привести к висящим указателям ... что-то позорное в Objective-C. Надеюсь, это поможет
«НЕИЗВЕСТНЫЕ Слабые и неизвестные ссылки ведут себя одинаково, но НЕ одинаковы».
Неизвестные ссылки, как слабые ссылки, не увеличивают количество сохраняемых объектов, на которые ссылаются. Тем не менее, в Swift, неизвестная ссылка имеет дополнительное преимущество , поскольку она не является опциональной . Это делает их более легкими в управлении , чем использование необязательного связывания. Это мало чем отличается от неявно развернутых опций. Кроме того, неизвестные ссылки являются ненулевыми . Это означает, что когда объект освобождается, он не обнуляет указатель. Это означает, что использование неизвестных ссылок может, в некоторых случаях, приводить к висящим указателям . Для вас, ботаников, которые помнят дни Objective-C, как и я, неподтвержденные ссылки отображаются на unsafe_unretained.
1116 Вот где это немного сбивает с толку.
Слабые и неизвестные ссылки не увеличивают количество сохраняемых данных.
Они оба могут быть использованы для прерывания удержания циклов. Так когда же мы их используем ?!
Согласно документам Apple :
«Используйте слабую ссылку, когда она действительна , чтобы эта ссылка в какой-то момент стала нулевой в течение своей жизни. И наоборот, используйте неизвестную ссылку, если вы знаете, что ссылка никогда не будет равна нулю, если она была установлена во время инициализации ».