博客 页面 2

iOS库 .a与.framework区别

0

一、什么是库?

库是共享程序代码的方式,一般分为静态库和动态库。

二、静态库与动态库的区别?

静态库:链接时完整地拷贝至可执行文件中,被多次使用就有多份冗余拷贝。

动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存。

三、iOS里静态库形式?

.a和.framework

四、iOS里动态库形式?

.dylib和.framework

五、framework为什么既是静态库又是动态库?

系统的.framework是动态库,我们自己建立的.framework是静态库。

六、a与.framework有什么区别?

.a是一个纯二进制文件,.framework中除了有二进制文件之外还有资源文件。

.a文件不能直接使用,至少要有.h文件配合,.framework文件可以直接使用。

.a + .h + sourceFile = .framework。

建议用.framework.

七、为什么要使用静态库?

方便共享代码,便于合理使用。

实现iOS程序的模块化。可以把固定的业务模块化成静态库。

和别人分享你的代码库,但不想让别人看到你代码的实现。

开发第三方sdk的需要。

八、制作静态库时的几点注意:

1 注意理解:无论是.a静态库还.framework静态库,我们需要的都是二进制文件+.h+其它资源文件的形式,不同的是,.a本身就是二进制文件,需要我们自己配上.h和其它文件才能使用,而.framework本身已经包含了.h和其它文件,可以直接使用。

2 图片资源的处理:两种静态库,一般都是把图片文件单独的放在一个.bundle文件中,一般.bundle的名字和.a或.framework的名字相同。.bundle文件很好弄,新建一个文件夹,把它改名为.bundle就可以了,右键,显示包内容可以向其中添加图片资源。

3 category是我们实际开发项目中经常用到的,把category打成静态库是没有问题的,但是在用这个静态库的工程中,调用category中的方法时会有找不到该方法的运行时错误(selector not recognized),解决办法是:在使用静态库的工程中配置other linker flags的值为-ObjC。

4 如果一个静态库很复杂,需要暴露的.h比较多的话,就可以在静态库的内部创建一个.h文件(一般这个.h文件的名字和静态库的名字相同),然后把所有需要暴露出来的.h文件都集中放在这个.h文件中,而那些原本需要暴露的.h都不需要再暴露了,只需要把.h暴露出来就可以了。

原文地址:http://blog.csdn.net/lvxiangan/article/details/43115131

mongodb图形化客户端

0

ROBO 3T下载地址
https://robomongo.org/download

ionic相关app

0

google play镜像网站:https://apkpure.com/search?q=ionic

npm报MSBUILD错误的解决办法

1

npm报错:
MSBUILD : error MSB3428: 未能加载 Visual C++ 组件“VCBuild.exe”。要解决此问题,1) 安装 .NET Framework 2.0 SDK;2) 安装 Microsoft Visual Studio 2005;或 3) 如果将该组件安装到了其他位置,请将其位置添加到系统路径中。

直接使用这个工具即可,一次解决所有问题:
https://github.com/felixrieseberg/windows-build-tools

npm install –global –production windows-build-tools
需要注意的是需要管理员权限安装,CMD右键管理员打开即可

angular组件交互

0

http://blog.csdn.net/kuangshp128/article/details/71172934

https://segmentfault.com/a/1190000008959575

ionic使用prod编译报错

2

使用ionic cordova run android没有报错,编译正常,但加上–prod编译发布版本报错,报错如下:

PS C:\Users\coloz\Desktop\iotapp> ionic cordova run android –prod
Running app-scripts build: –prod –platform android –target cordova
[13:02:15] build prod started …
[13:02:15] clean started …
[13:02:16] clean finished in 8 ms
[13:02:16] copy started …
[13:02:16] deeplinks started …
[13:02:16] deeplinks finished in 216 ms
[13:02:16] ngc started …
Error: Metadata version mismatch for module C:/Users/coloz/Desktop/iotapp/node_modules/@ionic/storage/dist/src/storage.d.ts, found version 4, expected 3
at StaticSymbolResolver.getModuleMetadata (C:\Users\coloz\Desktop\iotapp\node_modules\@angular\compiler\bundles\compiler.umd.js:25748:34)
at StaticSymbolResolver._createSymbolsOf (C:\Users\coloz\Desktop\iotapp\node_modules\@angular\compiler\bundles\compiler.umd.js:25536:46)
at StaticSymbolResolver.getSymbolsOf (C:\Users\coloz\Desktop\iotapp\node_modules\@angular\compiler\bundles\compiler.umd.js:25517:14)
at C:\Users\coloz\Desktop\iotapp\node_modules\@angular\compiler\bundles\compiler.umd.js:24376:30
at Array.forEach ()
at extractProgramSymbols (C:\Users\coloz\Desktop\iotapp\node_modules\@angular\compiler\bundles\compiler.umd.js:24375:79)
at AotCompiler.analyzeModulesAsync (C:\Users\coloz\Desktop\iotapp\node_modules\@angular\compiler\bundles\compiler.umd.js:23931:47)
at CodeGenerator.codegen (C:\Users\coloz\Desktop\iotapp\node_modules\@angular\compiler-cli\src\codegen.js:32:14)
at Function.NgTools_InternalApi_NG_2.codeGen (C:\Users\coloz\Desktop\iotapp\node_modules\@angular\compiler-cli\src\ngtools_api.js:73:30)
at Object.doCodegen (C:\Users\coloz\Desktop\iotapp\node_modules\@ionic\app-scripts\dist\aot\codegen.js:6:51)
[13:02:20] copy finished in 4.98 s

Error: Metadata version mismatch for module
模块版本不符,估计可能是我在另一台电脑时,更新了模块造成的
ionic官方github上解决方法:删除项目下的node_modules,并重新安装所有模块。
实际测试,还是没有解决问题。

angular项目安装node-sass报错

0

错误信息如下:
在此解决方案中一次生成一个项目。若要启用并行生成,请添加“/m”开关。
生成启动时间为 2017/11/3 21:04:22。
节点 1 上的项目“C:\Users\coloz\Desktop\Source\node_modules\node-sass\build\binding.sln”(默认目标)。
ValidateSolutionConfiguration:
正在生成解决方案配置“Release|x64”。
MSBUILD : error MSB3428: 未能加载 Visual C++ 组件“VCBuild.exe”。要解决此问题,1) 安装 .NET Framework 2.0 SDK;2) 安装 Microsoft Visual Studio 2005;或 3) 如果
将该组件安装到了其他位置,请将其位置添加到系统路径
中。 [C:\Users\coloz\Desktop\Source\node_modules\node-sass\build\binding.sln]
已完成生成项目“C:\Users\coloz\Desktop\Source\node_modules\node-sass\build\binding.sln”(默认目标)的操作 – 失败。

生成失败。

“C:\Users\coloz\Desktop\Source\node_modules\node-sass\build\binding.sln”(默认目标) (1) ->
(_src_\libsass 目标) ->
MSBUILD : error MSB3428: 未能加载 Visual C++ 组件“VCBuild.exe”。要解决此问题,1) 安装 .NET Framework 2.0 SDK;2) 安装 Microsoft Visual Studio 2005;或 3) 如
果将该组件安装到了其他位置,请将其位置添加到系统
路径中。 [C:\Users\coloz\Desktop\Source\node_modules\node-sass\build\binding.sln]

0 个警告
1 个错误

已用时间 00:00:00.69
gyp ERR! build error
gyp ERR! stack Error: C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe failed with exit code: 1
gyp ERR! stack at ChildProcess.onExit (C:\Users\coloz\Desktop\Source\node_modules\node-gyp\lib\build.js:258:23)
gyp ERR! stack at emitTwo (events.js:125:13)
gyp ERR! stack at ChildProcess.emit (events.js:213:7)
gyp ERR! stack at Process.ChildProcess._handle.onexit (internal/child_process.js:200:12)
gyp ERR! System Windows_NT 10.0.15063
gyp ERR! command “D:\\Program Files\\nodejs\\node.exe” “C:\\Users\\coloz\\Desktop\\Source\\node_modules\\node-gyp\\bin\\node-gyp.js” “rebuild” “–verbose” “–lib
sass_ext=” “–libsass_cflags=” “–libsass_ldflags=” “–libsass_library=”
gyp ERR! cwd C:\Users\coloz\Desktop\Source\node_modules\node-sass
gyp ERR! node -v v8.4.0
gyp ERR! node-gyp -v v3.6.2
gyp ERR! not ok
Build failed with error code: 1
npm WARN @angular/platform-server@4.0.2 requires a peer of @angular/animations@4.0.2 but none was installed.
npm WARN @angular/platform-server@4.0.2 requires a peer of @angular/core@4.0.2 but none was installed.
npm WARN @angular/platform-server@4.0.2 requires a peer of @angular/common@4.0.2 but none was installed.
npm WARN @angular/platform-server@4.0.2 requires a peer of @angular/compiler@4.0.2 but none was installed.
npm WARN @angular/platform-server@4.0.2 requires a peer of @angular/platform-browser@4.0.2 but none was installed.
npm WARN angular2-google-maps@0.17.0 requires a peer of @angular/common@^2.3.1 but none was installed.
npm WARN angular2-google-maps@0.17.0 requires a peer of @angular/core@^2.3.1 but none was installed.
npm WARN @ionic/cli-plugin-ionic-angular@1.3.1 requires a peer of @ionic/app-scripts@^1.3.7 but none was installed.
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.1.2 (node_modules\fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.1.2: wanted {“os”:”darwin”,”arch”:”any”} (current: {“os”:”win32″,”arch”:”x64″})

npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! node-sass@4.5.0 postinstall: node scripts/build.js
`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the node-sass@4.5.0 postinstall script. ikely additional logging output above.
npm ERR! This is probably not a problem with npm. There is l
ikely additional logging output above.
2017-11-03T13_04_32_612Z-debug.log
npm ERR! A complete log of this run can be found in:
npm ERR! C:\Users\coloz\AppData\Roaming\npm-cache\_logs\
_logs\2017-11-03T13_04_32_612Z-debug.log

解决办法:

npm报MSBUILD错误的解决办法

对ionic程序启动后白屏时间过长的优化

0

原因:
猜测是angular加载时间过长

两个方案:
1.把启动页面时间延长。虽然是个掩耳盗铃做做法,但至少能避免长时间白屏的尴尬
2.使用发布版,在编译时添加 –prod参数,能获得发布版的app,比debug版的速度快很多,可以几乎没有白屏,当然发布版是不能进行调试的

angular动态组建

0

比较好的教程:
https://segmentfault.com/a/1190000009175508

文中总结:
动态加载组件的流程:

1.获取装载动态组件的容器
2.在组件类的构造函数中,注入 ComponentFactoryResolver 对象
3.调用 ComponentFactoryResolver 对象的 resolveComponentFactory() 方法创建 ComponentFactory 对象
4.调用组件容器对象的 createComponent() 方法创建组件并自动添加动态组件到组件容器中
5基于返回的 ComponentRef 组件实例,配置组件相关属性 (可选)
6在模块 Metadata 对象的 entryComponents 属性中添加动态组件
declarations – 用于指定属于该模块的指令和管道列表
entryComponents – 用于指定在模块定义时,需要编译的组件列表。对于列表中声明的每个组件,Angular 将会创建对应的一个 ComponentFactory 对象,并将其存储在 ComponentFactoryResolver 对象中

动态组建要用到的3个功能:

ViewChild:

ViewChild装饰器来获取视图中的模板元素

ViewContainerRef

ComponentFactoryResolve

 

extends和implements区别

0

http://blog.csdn.net/tolcf/article/details/46135645

extends与implements的不同
1、在类的声明中,通过关键字extends来创建一个类的子类。
一个类通过关键字implements声明自己使用一个或者多个接口。
extends 是继承某个类, 继承之后可以使用父类的方法, 也可以重写父类的方法;
implements 是实现多个接口, 接口的方法一般为空的, 必须重写才能使用
2、extends是继承父类,只要那个类不是声明为final或者那个类定义为abstract的就能继承
JAVA中不支持多重继承,但是可以用接口 来实现,这样就要用到implements,继承只能继承一个类,
但implements可以实现多个接口,用逗号分开就行了 比如 :
class A extends B implements C,D,E
接口实现的注意点:
a.实现一个接口就是要实现该接口的所有的方法(抽象类除外)。
b.接口中的方法都是抽象的。
c.多个无关的类可以实现同一个接口,一个类可以实现多个无关的接口。

与Extends的不同
extends, 可以实现父类,也可以调用父类初始化 this.parent()。而且会覆盖父类定义的变量或者函数。这样的好处是:架构师定义好接口,让工程师实现就可以了。整个项目开发效率和开发成本大大降低。 implements,实现父类,子类不可以覆盖父类的方法或者变量。即使子类定义与父类相同的变量或者函数,也会被父类取代掉。
这两种实现的具体使用,是要看项目的实际情况,需要实现,不可以修改implements,只定义接口需要具体实现,或者可以被修改扩展性好,用extends。