基础知识(搞一搞),蓝牙项目(想一想)

1.在我们创建一个VC的时候,系统通常会生成几个默认的方法,这些方法大多与视图的调用有关。其中有一个viewDidUnload。这个方法的调用在发生内存警告的时候如果本视图不是当前屏幕上正在显示的视图的话, viewDidUnload将会被执行,本视图的所有子视图将被销毁,以释放内存,此时开发者需要手动对viewLoad、viewDidLoad中创建的对象释放内存。 因为当这个视图再次显示在屏幕上的时候,viewLoad、viewDidLoad 再次被调用,以便再次构造视图。 在内存足够的情况下,软件的视图通常会一直保存在内存中,但是如果内存不够,一些没有正在显示的viewcontroller就会收到内存不够的警告,然后就会释放自己拥有的视图,以达到释放内存的目的。但是系统只会释放内存,并不会释放对象的所有权,所以通常我们需要在这里将不需要在内存中保留的对象释放所有权,也就是将其指针置为nil。这个方法通常并不会在视图变换的时候被调用,而只会在系统退出或者收到内存警告的时候才会被调用。但是由于我们需要保证在收到内存警告的时候能够对其作出反应,所以这个方法通常我们都需要去实现。另外,即使在设备上按了Home键之后,系统也不一定会调用这个方法,因为IOS4之后,系统允许将APP在后台挂起,并将其继续滞留在内存中,因此,viewcontroller并不会调用这个方法来清除内存。

2.推荐一个可以检测内存泄漏的三方库MLeaksFinder

3.在url里面包含文字的时候需要对url进行字符串处理

NSString *url = [str stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

一句话搞定

4.为了防止从服务器获取的数据为空,造成程序崩溃。我们在赋值之前可以做一个判断,写成宏定义方便我们使用


#ifndef TC_PROTECT_STR


#define TC_PROTECT_STR(x) (x == nil ? @"" : x)


#endif


5.


[self.view setNeedsLayout];


[self.view layoutIfNeeded];


方法立即获取frame

6.之前写过一个外接蓝牙的项目,使用的是低功耗4.0的版本,现在来总结一下,首先要了解CoreBluetooth这个库,其主要分为中心管理者CBCentralManager和连着的外设CBPeripheralManager 实例化这2个对象,主要实现CBCentraManagerDelegate和CBPeripheralDelegate这2个代理协议    扫描可连接的设备,会自动出发检测蓝牙的状态的代理方法进行判断,设置BluetoothState的状态根据一下步骤

建立中心角色(实例化对象)-----扫描外设-----链接外设------扫描外设中的服务和特性-----与外设做数据交互-----订阅Characteristic的通知-----断开链接(disconnect)

发现外设后会调用其代理方法,可以获取到外设的信息,链接成功以后在设置外设的代理    再使用下面这个方法给外设写入数据  [self.peripherale writeValue:_batteryData forCharacteristic:self.characteristic type:CBCharacteristicWriteWithResponse];//第一个参数是已连接的蓝牙设备 ;第二个参数是要写入到哪个特征; 第三个参数是通过此响应记录是否成功写入

在这个之前我们要从硬件的文档中提前获知第二个参数中那些是写入的,哪些是需要订阅之后再度的,

你可能感兴趣的:(基础知识(搞一搞),蓝牙项目(想一想))