(U) Расширения Ruby: rb_gc_mark () и переменные экземпляра

В вашем viewDidLoad обратите внимание, что мой селектор вызывает мою функцию с двоеточием.

override func viewDidLoad() {
        super.viewDidLoad()
        // init gesture recognizer swipe right vars
        var rightSwipe = UISwipeGestureRecognizer(target: self, action: Selector("gestureFunc:"))
        rightSwipe.direction = UISwipeGestureRecognizerDirection.Right
        view.addGestureRecognizer(rightSwipe) 
    }

Затем убедитесь, что селектор, т. Е. Func, готов принять свайп:

        // selector from UISwipeGestureRecognizer
        func nextWeapon(gesture: UISwipeGestureRecognizer) {
        println("swipe right")
        }
6
задан Matheus Moreira 24 February 2012 в 16:43
поделиться

1 ответ

Сборщик мусора Ruby будет собирать все объекты Ruby, на которые есть ссылки в переменных экземпляра вашего объекта Ruby. Вам не нужно и не следует освобождать переменные экземпляра Ruby самостоятельно (т.е. любые объекты, доступ к которым осуществляется с помощью rb_iv_set () / rb_iv_get () в вашем расширении).

Однако, если обернутая структура C ссылается на объекты Ruby, вам нужно будет отметить их в обратном вызове mark , который вы передаете в Data_Wrap_Struct () .

(И вам всегда придется освобождать базовую структуру и выполнять любую другую очистку, которая может потребоваться, например, закрытие файлов, сокетов и т. Д. В вашем бесплатном обратном вызове.)

7
ответ дан 17 December 2019 в 00:13
поделиться
Другие вопросы по тегам:

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