u0u0's Offical Site - iOS
type: channel
link: http://www.tyrantek.com/tag/iOS/
items: iOS 静态库平台合并脚本
items: OpenAL编译iOS和Mac库
items: iOS 12国行的特供联网提示框不弹出
items: iOS内存管理进阶：detachNewThreadSelector与NSNotificationCenter
items: UIToolbar的UIBarButtonItem定制

iOS 静态库平台合并脚本
type: item
date: 2020-01-27T11:12:50+08:00
description: libwebsockets-i86.a libwebsockets-x86_64.alibwebsockets-arm32.a libwebsockets-arm64.a#!/bin/bash DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" LIPO="xcrun -sdk iphoneos lipo" STRIP="xcrun -sdk iphoneos strip" LIBNAME=libwebsockets $LIPO -create $DIR/$LIBNAME-*.a -output $DIR/$LIBNAME.a $STRIP -S $DIR/$LIBNAME.a $LIPO -info $DIR/$LIBNAME.a

OpenAL编译iOS和Mac库
type: item
date: 2019-11-16T14:19:00+08:00
description: 需要用到 https://github.com/leetal/ios-cmake源码修正修改common/almalloc.cpp ，屏蔽下面的代码//#define ALIGNED_ALLOC_AVAILABLE (__STDC_VERSION__ >= 201112L || __cplusplus >= 201703L)aligned_alloc 在ios13支持，早期的iOS会crash编译cmake 需要3.14+每个target单独编译，用combine模式有错误。arm64cmake .. -DCMAKE_TOOLCHAIN_FILE=../ios.toolchain.cmake -DLIBTYPE=STATIC -DALSOFT_INSTALL=OFF -DDEPLOYMENT_TARGET=9.0 -DPLATFORM=OS64 -DCMAKE_BUILD_TYPE=Release -DALSOFT_DLOPEN=OFF make OpenAL make commonarmv7cmake .. -DCMAKE_TOOLCHAIN_FILE=../ios.toolchain.cmake -DLIBTYPE=STATIC -DALSOFT_INSTALL=OFF -DDEPLOYMENT_TARGET=9.0 -DARCHS=armv7 -DCMAKE_BUILD_TYPE=Release -DALSOFT_DLOPEN=OFFx86_64 cmake .. -DCMAKE_TOOLCHAIN_FILE=../ios.toolchain.cmake -DLIBTYPE=STATIC -DALSOFT_INSTALL=OFF -DDEPLOYMENT_TARGET=9.0 -DPLATFORM=SIMULATOR64 -DCMAKE_BUILD_TYPE=Release -DALSOFT_DLOPEN=OFF废弃 -- i386cmake .. -DCMAKE_TOOLCHAIN_FILE=../ios.toolchain.cmake -DLIBTYPE=STATIC -DALSOFT_INSTALL=OFF -DDEPLOYMENT_TARGET=9.0 -DPLATFORM=SIMULATOR -DCMAKE_BUILD_TYPE=Release -DALSOFT_DLOPEN=OFFMac x86_84cmake .. -DLIBTYPE=STATIC -DALSOFT_INSTALL=OFF -DDEPLOYMENT_TARGET=10.11 -DCMAKE_BUILD_TYPE=Release -DALSOFT_DLOPEN=OFF -DCMAKE_OSX_ARCHITECTURES=x86_64Mac arm64cmake .. -DLIBTYPE=STATIC -DALSOFT_INSTALL=OFF -DDEPLOYMENT_TARGET=10.11 -DCMAKE_BUILD_TYPE=Release -DALSOFT_DLOPEN=OFF -DCMAKE_OSX_ARCHITECTURES=arm64整合库新建sh脚本，放到库目录下运行#!/bin/sh DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" LIPO="xcrun -sdk iphoneos lipo" STRIP="xcrun -sdk iphoneos strip" $LIPO -create "$DIR"/libcommon-*.a -output "$DIR"/libcommon.a $STRIP -S "$DIR"/libcommon.a $LIPO -info "$DIR"/libcommon.a $LIPO -create "$DIR"/libopenal-*.a -output "$DIR"/libopenal.a $STRIP -S "$DIR"/libopenal.a $LIPO -info "$DIR"/libopenal.a

iOS 12国行的特供联网提示框不弹出
type: item
date: 2019-05-01T09:44:44+08:00
description: 非常蛋痛，必须请求带域名的http才能触发，直接ip地址不一定触发。需要无脑请求一次带域名的网络。local request = network.createHTTPRequest(function(event) end, "http://cocos2d-lua.org", "GET") request:start()

iOS内存管理进阶：detachNewThreadSelector与NSNotificationCenter
type: item
date: 2013-05-09T14:54:22+08:00
description: 1、后台线程 iOS中启动线程是件很简单的事情，有多种方式，下面这种是我最喜欢的，不需要释放线程对象，线程结束自动释放线程。 [NSThread detachNewThreadSelector:SEL toTarget:self withObject:obj]; 最近开发一个功能，需要在UIViewController中启动一个线程，target为UIViewController， 这时候联想到一个问题，如果点击navigationbar上的back按钮，这时候是否UIViewController会销毁，线程会引发程序崩溃？ 搜索后得到下面的结论The objects aTarget and anArgument are retained during the execution of the detached thread, then released.同样适用的还有[self performSelectorInBackground]等接口。 target和object均会retain，线程结束后自动释放。2、消息中心 同样挂在消息中心的观察者，如果观察者销毁了，必须在销毁之前从消息中心移除观察者。 在ARC中可能容易忘记这一点，ARC处理了大部分情况，以至于很多时候我们不需要实现dealloc方法。 但是消息中心是个特例，需要自己处理。 - (void)dealloc { [[NSNotificationCenter defaultCenter] removeObserver:self]; } 注意：arc中不需要写[supre dealloc]

UIToolbar的UIBarButtonItem定制
type: item
date: 2013-05-06T14:41:43+08:00
description: UIBarButtonSystemItem有10多个类型，但并不能完全满足应用开发需求。 想要弄个设置按钮在右边，首先想到的是图片方式。 无意中发现stack overflow有人提到unicode字符来实现。不使用图片，尝试了各种方法，均无法匹配UIBarButtonSystemItem的效果。尝试1、 UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; CGFloat toolbarHeight = self.navigationController.toolbar.frame.size.height; button.frame = CGRectMake(0, 0, toolbarHeight, toolbarHeight); [button addTarget:self action:@selector(btnSettingClicked:) forControlEvents:UIControlEventTouchUpInside]; button.titleLabel.font = [UIFont systemFontOfSize:25]; [button setTitleEdgeInsets:UIEdgeInsetsMake(0.0, 21.0, 0.0, 0.0)]; [button setTitle:@"\u2699" forState:UIControlStateNormal]; UIBarButtonItem *settingButton = [[UIBarButtonItem alloc] initWithCustomView:button]; 使用了initWithCustomView方法，这是UIBarButtonItem自由度最高的定制方式。 优点：克服了文字水平偏移，垂直方向自动对其。 缺点：settingButton.style = UIBarButtonItemStylePlain;无效，不能实现高亮状态下的白斑。尝试2、 UIBarButtonItem *settingButton = [[UIBarButtonItem alloc] initWithTitle:@"\u2699" style:UIBarButtonItemStylePlain target:self action:@selector(btnSettingClicked:)]; [settingButton setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIFont boldSystemFontOfSize:20], UITextAttributeFont, nil] forState:UIControlStateNormal]; 使用了initWithTitle方法，代码简洁不少。 优点：可以设置style，实现高亮状态下的白斑。 缺点：UIBarButtonItem的setTitlePositionAdjustment对UIBarButtonItemStylePlain无效，文字会向上偏移2个左右像素，和UIBarButtonSystemItem混用的时候，会看到明显的参差不齐。结论：使用unicode字符无法完全实现UIBarButtonSystemItem一样的效果。tip1: UIBarButtonItem的setTitlePositionAdjustment对UIBarButtonItemStyleBordered有效。tip2: UINavigationController中的UIToolbar用下面的方式设置。 [self.navigationController setToolbarHidden:NO animated:NO]; //should set toolbarItems on each individual view controller [self setToolbarItems:btnArray animated:NO];