アプリのメモリ リークを修正し、外部クラスを使用する最善の方法を見つけようとしています。私はコロナ SDK でコーディングし、ストーリーボードを使用しています。クラスを介してオブジェクトを作成するときに、オブジェクトを適切に削除しているとは思いません。以下をご覧いただき、ご協力いただけますでしょうか
1) コードの最後に、キーボードを削除する方法を示します。キーボードは別のファイルで作成されているので、それで十分ですか、それとももっとやる必要がありますか?
2) keyboard.lua では、keyboard.lua ファイルが後で関数を使用してオブジェクトを操作できるように、オブジェクトを作成する必要があります。これは、theKeyboard、theCursor、theBackground を宣言することで行いました。
それらを M.theKeyboard、M.theCursor、M.theBackground と呼び、M がローカルであるため事前に宣言しないことに対して、それを行う理由はありますか?
3) このキーボード クラスを別の方法で実装しますか? もしそうなら、私にポインタを教えてもらえますか?
これがコード例です。このキーボード コードをアプリ全体で再利用したいと考えています。キーボードは常に 1 つだけにする必要があります。多くの画面ではキーボードが必要ないため、ユーザーがシーンを終了するときにキーボードを完全に削除したいと考えています。
-- keyboard.lua
local M = {}
local theKeyboard, theCursor, theBackground
function M.newBackground()
if theBackground then
theBackground = nil
end
local newBackground = display.newRect(0,0,0,0)
-- set position, size, color, etc
theBackground = newBackground
return newBackground
end
... many other functions to create cursor, textlabels, etc
function M.newKeyboard()
if theKeyboard then
theKeyboard = nil
end
theKeyboard = display.newGroup()
theCursor = M.newCursor()
theBackground = M.newBackground()
-- lots more stuff... like I create buttons for each key on the keyboard
theKeyboard:insert(theCursor)
theKeyboard:insert(theBackground)
return theKeyboard
end
function M.removeKeyboard()
display.remove(theCursor)
display.remove(theBackground)
display.remove(theKeyboard)
theCursor = nil
theBackground = nil
theKeyboard = nil
end
return M
次に、私のアプリはストーリーボードを使用するため、キーボードをシーンに統合する方法の例を次に示します。
local keyboard = require ( "keyboard" )
local storyboard = require( "storyboard" )
local scene = storyboard.newScene()
local keyboardGroup, otherobjects
function scene:createScene( event )
local group = self.view
keyboardGroup = keyboard.newKeyboard
group:insert( keyboardGroup )
end
end
-- other code
-- Called prior to the removal of scene's "view" (display group)
function scene:destroyScene( event )
local group = self.view
-- Is this sufficient for removing the keyboard completely?
keyboard.removeKeyboard()
keyboardGroup = nil
end
end
---------------------------------------------------------------------------------
-- END OF YOUR IMPLEMENTATION
---------------------------------------------------------------------------------
-- additional code that comes with storyboard
return scene