ios和android一些小知识总结

简单的数据存储

ios:Preference(偏好设置)

OC中有一个NSUserDefaults的单例,它可以用来存储用户的偏好设置,例如:用户名,字体的大小,用户的一些设置等,下面我用来演示如何保存一些简单数据

保存用户偏好设置

[cpp]// 获取用户偏好设置对象
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
// 保存用户偏好设置
[defaults setBool:YES forKey:@"one"];
[defaults setObject:@"hello test" forKey:@"two"];
// 注意:UserDefaults设置数据时,不是立即写入,而是根据时间戳定时地把缓存中的数据写入本地磁盘。所以调用了set方法之后数据有可能还没有写入磁盘应用程序就终止了。
// 出现以上问题,可以通过调用synchornize方法强制写入
// 现在这个版本不用写也会马上写入 不过之前的版本不会 [defaults synchronize];[/cpp]

读取偏好设置

[cpp]
//读取用户偏好设置
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
BOOL one = [defaults boolForKey:@"one"];
NSString *two= [defaults  objectForKey:@"two"];
[/cpp]

android:SharedPreferences:用户偏好设置

SharedPreferences使用键值对来存储数据,默认以xml文件形式进行存储,对应的文件保存到手机内存的data//xxx(保存数据时建立的文件)目录下面,提供和putString(),putInt(),putBoolean()等方法存储不同类型的数据,使用时很方便。
因为SharedPreferences存储时的数据格式和数据类型限制,它只适用于存储一些简单用户设置,例如用户设置的夜间模式,音量,或者登录信息等。

存储数据

[java]
SharedPreferences sp = getSharedPreferences("sp_demo", Context.MODE_PRIVATE);
Editor editor = sp.edit();
editor.putString("name", "小张");
editor.putInt("age", 11);
editor.commit();
[/java]

读取数据

[java]
SharedPreferences sp = getSharedPreferences("sp_demo", Context.MODE_PRIVATE);
String name = sp.getString("name", null);
int age = sp.getInt("age", 0);
[/java]

 

http网络请求

 

字符串相关

字符串比较

 

字符串转换

 

字符串替换

cocos 与原生的相互调用

 

 

一些编程感悟

先来一段注释

//  To Do

lua onlyread table 的实现 与遍历

只读表的实现

游戏开发中有时候我们需要实现一个table初始化过后,就只能访问其值却不能修改其内容,采用代理思想很容易实现一个只读table,我们需要做得只是当我们监控到企图修改表时候抛出错误。通过__index metamethod,我们可以不使用函数而是用原始表本身来使用表,因为我们不需要监控查寻。这是比较简单并且高效的重定向所有查询到原始表的方法。但是,这种用法要求每一个只读代理有一个单独的新的metatable,使用__index指向原始表;lua程序设计给出了实现:

[lua]
function readOnly (t)
local proxy = {}
local mt = { — create metatable
__index = t,
__newindex = function (t,k,v)
error("attempt to update a read-only table", 2)
end
}

setmetatable(proxy, mt)
return proxy
end
[/lua]

注:(error的第二个参数2,将错误信息返回给企图执行update的地方)

下面我们测试一下我们的代码:

[lua]
days = readOnly{"Sunday", "Monday", "Tuesday", "Wednesday",
"Thursday", "Friday", "Saturday"}

print(days[1]) –> Sunday
days[2] = "Noday"
[/lua]

 

输出:

Sunday
lua: readTest.lua:18: attempt to update a read-only table
stack traceback:
[C]: in function ‘error’
readTest.lua:6: in function <readTest.lua:5>
readTest.lua:18: in main chunk
[C]: ?

我们看到,当我们试图去修改只读表时就会抛出错误

但是这样处理后的table我们的迭代器都将失效(pairs, ipairs, next

[lua]
days = readOnly{"Sunday", "Monday", "Tuesday", "Wednesday",
"Thursday", "Friday", "Saturday"}

print(days[1]) –> Sunday
–days[2] = "Noday"
— prints nothing!
for k,v in pairs(days) do
print(k,v)
end

print(next(days)) — prints nil!
print(#days) — prints "0"!
[/lua]

输出:

Sunday
nil
0

可以看到我们现在无法遍历只读表的元素了接下来我没就来讨论怎么去遍历我们只读表

如何遍历只读表

我们想重新遍历只读表,只能重写next()方法了 ,重新用心的next()定义pairs()还要的对readOnly方法做点小的修改,下面改成全部代码:

[lua]
rawnext = next
function next(t,k) –重定义next
local m = getmetatable(t)
local n = m and m.__next or rawnext –添加__next
return n(t,k)
end
function readOnly (t)
local proxy = {}
local mt = { — create metatable
__index = t,
__newindex = function (t,k,v)
error("attempt to update a read-only table", 2)
end,
__next = function(tt, k) –添加__next元表实现
return next(t, k)
end
}

setmetatable(proxy, mt)
return proxy
end
days = readOnly{Sunday = 1, Monday = 2, Tuesday = 3, Wednesday = 4,
Thursday = 5, Friday = 6, Saturday = 7}

print(days["Sunday"]) –> 1
–days["Tuesday"] = 3

function pair (t)
return next, t, nil
end
function pairs(t) return next, t, nil end –重定义pairs
–for k,v in next, days do print(k,v) end
for k ,v in pairs(days) do

print(k..v)
end
[/lua]

输出:

1
Saturday7
Tuesday3
Wednesday4
Friday6
Sunday1
Thursday5
Monday2

可以看到我么可以用pairs()重新遍历我们的只读表了

更多参考Generalized Pairs And Ipairs

让syntaxhighlighter 插件支持lua语言

wordpress 的代码高亮插件syntaxhighlighter是不支持lua脚本语言的,这个让读者看起lua代码来着实费劲,我抽空看了一下,只要扩展 syntaxhighlighter里面的shBrush 就好了,先贴出shBrushLua.js的代码
[js]
/**
* SyntaxHighlighter
* http://alexgorbatchev.com/SyntaxHighlighter
*
* SyntaxHighlighter is donationware. If you are using it, please donate.
* http://alexgorbatchev.com/SyntaxHighlighter/donate.html
*
* @version
* 3.0.83 (July 02 2010)
*
* @copyright
* Copyright (C) 2004-2010 Alex Gorbatchev.
*
* @license
* Dual licensed under the MIT and GPL licenses.
*/
;(function()
{
// CommonJS
typeof(require) != ‘undefined’ ? SyntaxHighlighter = require(‘shCore’).SyntaxHighlighter : null;

function Brush()
{
// maker is IkPil, Choi
// http://www.ikpil.com

var keywords = ‘and break do else elseif end false for function if in ‘ +
‘local nil not or repeat return then true until while’;

var functions = ‘_G _VERSION assert collectgarbage dofile error getfenv ‘ +
‘getmetatable ipairs load module next pairs pcall print ‘ +
‘ rawequal rawget rawset require select setfenv setmetatable ‘ +
‘tonumber tostring type unpack xpcall ‘ +
‘coroutine.create coroutine.resume coroutine.running ‘ +
‘coroutine.status coroutine.wrap coroutine.yield ‘ +
‘debug.debug debug.getfenv debug.gethook debug.getinfo ‘ +
‘debug.getlocal debug.getmetatable debug.getregistry ‘ +
‘debug.getupvalue debug.setfenv debug.sethook debug.setlocal ‘ +
‘debug.setmetatable debug.setupvalue debug.traceback ‘ +
‘file:close file:flush file:lines file:read file:seek ‘ +
‘file:setvbuf file:write’ +
‘io.close io.flush io.input io.lines io.open io.output ‘ +
‘io.popen io.read io.stderr io.stdin io.stdout io.tmpfile ‘ +
‘io.type io.write ‘ +
‘math.abs math.acos math.asin math.atan math.atan2 math.ceil ‘ +
‘math.cos math.cosh math.deg math.exp math.floor math.fmod ‘ +
‘math.frexp math.huge math.ldexp math.log math.log10 math.max ‘ +
‘math.min math.modf math.pi math.pow math.rad math.random ‘ +
‘math.randomseed math.sin math.sinh math.sqrt math.tan math.tanh ‘ +
‘os.clock os.date os.difftime os.execute os.exit os.getenv os.remove ‘ +
‘os.rename os.setlocale os.time os.tmpname ‘ +
‘package.cpath package.loaded package.loaders package.loadlib ‘ +
‘package.path package.preload package.seeall ‘ +
‘string.byte string.char string.dump string.find string.format ‘ +
‘string.gmatch string.gsub string.len string.lower string.match ‘ +
‘string.rep string.reverse string.sub string.upper table.concat ‘ +
‘table.insert table.maxn table.remove table.sort’;

this.regexList = [
{ regex: /–.*/gm, css: ‘comments’ }, // one line comments
{ regex: /–\[\[[\S\s]*\]\]/gm, css: ‘comments’ }, // multi line comments
{ regex: SyntaxHighlighter.regexLib.doubleQuotedString, css: ‘string’ }, // strings
{ regex: SyntaxHighlighter.regexLib.singleQuotedString, css: ‘string’ }, // strings
{ regex: SyntaxHighlighter.regexLib.multiLineDoubleQuotedString, css: ‘string’ }, // strings
{ regex: SyntaxHighlighter.regexLib.multiLineSingleQuotedString, css: ‘string’ }, // strings
{ regex: new RegExp(this.getKeywords(keywords), ‘gm’), css: ‘keyword’ }, // keywords
{ regex: new RegExp(this.getKeywords(functions), ‘gm’), css: ‘functions’ } // functions
];
}

Brush.prototype = new SyntaxHighlighter.Highlighter();
Brush.aliases = [‘lua’];

SyntaxHighlighter.brushes.Lua = Brush;

// CommonJS
typeof(exports) != ‘undefined’ ? exports.Brush = Brush : null;
})();
[/js]
接下来就是把shBrushLua.js文件放到scripts 文件夹下面,现在shBrush就准备好了

最后就是修改SyntaxHighlighter插件的php的源码,把shBurshLua添加到shBrush;打开syntaxhighlighter.php文件找到如图位置
clipboard
插入下面一行代码
[php]
wp_register_script( ‘syntaxhighlighter-brush-lua’, plugins_url( $this->shfolder . ‘/scripts/shBrushLua.js’, __FILE__ ), array(‘syntaxhighlighter-core’), $this->agshver );
[/php]
找到$this->brushes = (array) apply_filters( ‘syntaxhighlighter_brushes’, array( 这里在数据组的最下面添加 ‘lua’ => ‘lua’, 如图clipboard2
保存就好了

让我们写段测试代码看一下效果
[lua]
function pirntTest()
for i = 1,10 do
print("hello world")
end
end
[/lua]

三人行,必有我师

建此站目的就是,记录一些工作学的经验和心得体会。向众人学习,三人行必有我师也,达者为师,知者为尊,知识没有尽头 ;
细嗅蔷薇
一句谚语大家共勉  — In me the tiger sniffs the rose  (心有猛虎,细嗅蔷薇)