摘要:选择“Cocoa Touch Static Library” 输入静态库名称 添加库需要包含的源代码 选择需要暴露出来的.h文件,.m文件会自动编译到.a文件中 选择真机设备,然后 Command+B 编译,libMJRefresh.a文件从红色变为黑色 选择模拟器,依然 Command+B ,模拟
阅读全文
摘要:在网络应用中,需要对用户设备的网络状态进行实时监控,目的是 让用户了解自己的网络状态,防止一些误会(比如怪应用无能) 根据用户的网络状态进行智能处理,节省用户流量,提高用户体验 WIFI\3G网络:自动下载高清图片 低速网络:只下载缩略图 没有网络:只显示离线的缓存数据 苹果官方提供了一个叫Reachability的示例程序,便于开发者检测网络状态 https://developer.appl...
阅读全文
摘要:为了提高程序的响应速度,可以考虑使用缓存(内存缓存\硬盘缓存) 第一次请求数据时内存缓存中没有数据硬盘缓存中没有数据 取得某个请求的缓存- (NSCachedURLResponse *)cachedResponseForRequest:(NSURLRequest *)request; 清除某个请求的
阅读全文
摘要:什么是Charles Charles是一款代理服务器软件,可以用来拦截网络请求 利用Charles能得知大部分公司app的数据来源和数据格式 下载地址:http://www.charlesproxy.com/download/
阅读全文
摘要:什么是UIWebViewUIWebView是iOS内置的浏览器控件系统自带的Safari浏览器就是通过UIWebView实现的 UIWebView不但能加载远程的网页资源,还能加载绝大部分的常见文件html\htmpdf、doc、ppt、txtmp4… … UIWebView常用的加载资源的方法-
阅读全文
摘要:Content-Type multipart/form-data; boundary=本次上传标示字符串(不能中文) --本次上传标示字符串 \nContent-Disposition: form-data; name="服务端字段"; filename="上传文件名" \nContent-Type
阅读全文
摘要:什么是AFN全称是AFNetworking,是对NSURLConnection、NSURLSession的一层封装虽然运行效率没有ASI高,但是使用比ASI简单在iOS开发中,使用比较广泛 AFN的github地址https://github.com/AFNetworking/AFNetworkin
阅读全文
摘要:什么是ASI全称是ASIHTTPRequest,外号“HTTP终结者”,功能十分强大基于底层的CFNetwork框架,运行效率很高可惜作者早已停止更新,有一些潜在的BUG无人去解决很多公司的旧项目里面都残留着它的身影,以前的很多iOS项目都是ASI + SBJson会不会用ASI,可以算是检验是否为
阅读全文
摘要:#import @interface Student : NSObject // copy代表set方法会release旧对象、copy新对象 // 修改外面的变量,并不会影响到内部的成员变量 // 建议:NSString一般用copy策略,其他对象一般用retain @property (nonatomic, copy) NSString *name; + (id)studentWi...
阅读全文
摘要:#import #import "Student.h" void arrayCreate() { NSMutableArray *array = [NSMutableArray arrayWithObject:@"1"]; // 添加元素 [array addObject:@"2"]; [array addObject:@"3"]; //...
阅读全文
摘要:#import #import "Student.h" #pragma mark 创建一个数组 void arrayCreate() { // 创建一个空的数组 NSArray *array = [NSArray array]; // 创建有1个元素的数组 array = [NSArray arrayWithObject:@"123"]; ...
阅读全文
摘要:#pragma mark 可变字符串的创建 void stringCreate() { // 预先分配10个字数的存储空间 NSMutableString *str = [[NSMutableString alloc] initWithCapacity:10]; // 设置字符串内容 [str setString:@"1234"]; // 拼...
阅读全文
摘要:#import void changeC(char *d) { *d = 9; } void changeStr(NSString **str2) { *str2 = @"123"; } int main(int argc, const char * argv[]) { @autoreleasepool { // char c = 10; //...
阅读全文
摘要:@interface Student : NSObject { // @public // @protected // @private // 默认的作用域是@protected int age; @protected int no; @public float height; } @propert...
阅读全文
摘要:// 在xcode4.5的环境下,可以省略@synthesize,并且默认会去访问_age这个成员变量// 如果找不到_age这个成员变量,会自动生成一个叫做_age的私有成员变量
阅读全文
摘要:// ()代表着是一个分类 // ()中的Test代表着分类的名称 @interface Student (Test) // 分类只能扩展方法,不能增加成员变量 - (void)test2; @end
阅读全文
摘要:内存管理 retain和release简单使用 #import <Foundation/Foundation.h> #import "Student.h" void test() { Student *stu = [[Student alloc] init]; // 1 // z代表无符号 NSLo
阅读全文
摘要:// 如果是继承某个类,就要导入类的头文件// 如果只是定义成员变量、属性,用@class
阅读全文
摘要:// #define Integer int // 给基本数据类型起别名 void test() { typedef int Integer; typedef Integer MyInteger; typedef unsigned int UInteger; int a = 10; Integer b = 9; ...
阅读全文
摘要:#include // 定义一个one函数 // 完整地定义一个外部函数需要extern关键字 //extern void one() { // printf("调用了one函数\n"); //} // 内部函数,需要用static关键字修饰,说明不能在其他文件中访问 static void one() { printf("调用了one函数\n"); } #ifnde...
阅读全文
摘要:#include // 定义一个one函数 // 完整地定义一个外部函数需要extern关键字 //extern void one() { // printf("调用了one函数\n"); //} // 默认情况下就是外部函数,所以可以省略extern void one() { printf("调用了one函数\n"); } #ifndef extern___...
阅读全文
摘要:注意: extern只能用来声明全部变量,不能拿来定义变量
阅读全文
摘要:void test() { // 定义一种枚举类型 enum Season {spring, summer, autumn, winter}; // 定义一个枚举变量s enum Season s = winter; } void test1() { // 定义枚举类型的同时定义一个枚举变量s enum Season {spring...
阅读全文
摘要:void test() { // 这个机构只能在函数内部使用 // 定义一个名为Student的结构体类型 struct Student { int age; // 年龄 char *name; // 姓名 float height; // 身高 }; // 定义一个结构体变量 struct...
阅读全文
摘要:#import @interface Student : NSObject { int _age; int _no; } - (void)setAge:(int)age; - (int)age; - (void)setNo:(int)no; - (int)no; // 自己写一个构造方法 - (id)initWithAge:(int)age andNo:(int)n...
阅读全文
摘要:// a是一个全局变量,静态变量 int a; void test() { // b是一个局部变量,自动变量 int b = 0; b++; // c是一个局部变量,静态变量 static int c = 0; c++; printf("b=%d, c=%d\n", b, c); } int main(int a...
阅读全文
摘要:#include #include // strlen void test() { // 测量字符串常量的字符长度(不包括\0这个字符) int len = strlen("李某某"); //printf("%d\n", len); // 测量字符串变量的字符长度 char s[] = "lmj"; //printf("%d\...
阅读全文
摘要:#include "one.h" #include "two.h" int main(int argc, const char * argv[]) { one(); two(); return 0; }
阅读全文
摘要:// 字符串的定义和初始化 void test() { // "mj" char s[] = {'m', 'j', '\0'}; // 字符串"mj" char s1[3] = {'m', 'j', '\0'}; // 字符串"mj" char s2[3] = {'m', 'j'}; // 并不是正规的字符串 char s...
阅读全文
摘要:指针的基本声明: void test() { char a; // a = 10; 直接引用 // 定义了一个指针变量b,而且b只能指向char类型的变量 char *b; // 让指针变量b指向a b = &a; // 这里的*b代表:访问b值对应的存储空间(也就是变量a的存储空间) // 相当于
阅读全文
摘要:#include int sum(int a, int b) { int c = a + b; printf("%d + %d = %d\n", a, b, c); return c; } int minus(int a, int b) { return a - b; } int mul(int a, int b) { ...
阅读全文
摘要:#include #define NUM -1 int main(int argc, const char * argv[]) { #if NUM > 0 printf("NUM大于0"); #elif NUM == 0 printf("NUM等于0"); #else printf("NUM小于0"); #endif return...
阅读全文
摘要:#include // 数组的定义和存储 void test1() { int ages[5]; // 64bit环境下占用4*5=20个字节 // 计算数组占据的存储空间 // size_t size = sizeof(ages); //printf("ages占据的字节:%d", size); // 查看数组的地址 ...
阅读全文
摘要:#include // NUM叫做宏名 // 6是用来替换宏名的字符串 #define NUM 6 #define mul(a, b) ((a)*(b)) void test() { // 双引号中的NUM并不会被替换为6 char *s = "NUMBER"; int a[NUM] = {1,2,3,4,5,6}; ...
阅读全文
摘要:#include char * test() { return "itcast"; } int main(int argc, const char * argv[]) { printf("%s", test()); return 0; }
阅读全文
摘要:#include void test1() { // 1.提示用户输入数据 printf("请输入一个整数:"); // 2.接收用户输入的数据 int a; // &a代表变量a的地址 // 输入完毕后敲回车 scanf("%d", &a); // 3.计算a的平方 printf("%d的平方为:%...
阅读全文
摘要:#include int main(int argc, const char * argv[]) { // insert code here... printf("Hello, World!\n"); printf("My age is %d\n", 26); // My age is 26,height is...
阅读全文
摘要:申请key ● http://lbsyun.baidu.com/apiconsole/key 下载SDK ● 下载百度地图开发包:http://api.map.baidu.com/lbsapi/cloud/sdkiosdev- download.htm ● 最新版本 开发指南 ● 如何使用开发包可以
阅读全文
摘要:● MapKit框架使用前提 ● 导入框架 ● 导入主头文件#import <MapKit/MapKit.h> ● MapKit框架使用须知 ● MapKit框架中所有数据类型的前缀都是MK ● MapKit有一个比较重要的UI控件 :MKMapView,专门用于地图显示 跟踪显示用户的位置 ● 设
阅读全文
摘要:● 在移动互联网时代,移动app能解决用户的很多生活琐事,比如 ● 导航:去任意陌生的地方 ● 周边:找餐馆、找酒店、找银行、找电影院 ● 在上述应用中,都用到了地图和定位功能,在iOS开发中,要想加入这2 大功 能,必须基于2个框架进行开发 ● Map Kit :用于地图展示 ● Core Loc
阅读全文
摘要:使用注意 ● 注意点 ● 存放VLC的文件夹名不要有空格 ● 一旦执行过编译脚本sh,就别再修改存放VLC的文件夹名 编译 ● 打开最外层的工作空间 选择真机运行 编译 ● 一些简单的示例程序 集成 静态库+头文件 依赖库 C++标准库 ● 导入头文件, 播放视频 #import "VLCMedia
阅读全文
摘要:#import "HMViewController.h" #import @interface HMViewController () - (IBAction)startRecord; - (IBAction)stopRecord; @property (nonatomic, strong) AVAudioRecorder *recorder; @property (nonatomi...
阅读全文
摘要:一、音频播放 1.音效播放(短时间的音频文件)1> AudioServicesCreateSystemSoundID2> AudioServicesPlaySystemSound2.音乐播放(长时间的音频文件)1> AVAudioPlayer只能播放本地的音频文件2> AVPlayer能播放本地、远
阅读全文
摘要:#import "ViewController.h" @interface ViewController () @property (nonatomic, strong) UIView *blueView; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; ...
阅读全文
摘要:● 什么是JPush ● 一套远程推送解决方案,支持android和iOS两个平台 ● 它能够快捷地为iOS App增加推送功能,减少集成APNs需要的工作量、开发复杂 度 ● 更多的信息,可以参考JPush官方网站:https://www.jpush.cn ● 集成iOS SDK的步骤可以参考 ●
阅读全文
摘要:● PushMeBaby是一款用来测试ANPs的开源Mac项目 ● 它充当了服务器的作用,用法非常简单 ● 它负责将内容提交给苹果的APNs服务器,苹果的APNs服务器再将内容推送给用户 的设备 ● PushMeBaby的主页 ● https://github.com/stefanhafeneger
阅读全文
摘要:下载极光推送文件,将以下两个文件导入项目中 APService.h libpushSDK.a
阅读全文
摘要:● 什么是远程推送通知 ● 顾名思义,就是从远程服务器推送给客户端的通知(需要联网) ● 远程推送服务,又称为APNs(Apple Push Notification Services) ● 为什么需要远程推送通知? ● 传统获取数据的局限性 • 只要用户关闭了app,就无法跟app的服务器沟通,无
阅读全文
摘要:推送通知 ● 注意:这里说的推送通知跟NSNotification有所区别 • NSNotification是抽象的,不可见的 • 推送通知是可见的(能用肉眼看到) ● iOS中提供了2种推送通知 ● 本地推送通知(Local Notification) ● 远程推送通知(Remote Notifi
阅读全文
摘要:#import @interface HMViewController () @end @implementation HMViewController - (void)viewDidLoad { [super viewDidLoad]; } - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { ...
阅读全文
摘要:如何访问用户的通讯录 在iOS中,有2个框架可以访问用户的通讯录 AddressBookUI.framework 提供了联系人列表界面、联系人详情界面、添加联系人界面等 一般用于选择联系人 AddressBook.framework 纯C语言的API,仅仅是获得联系人数据 没有提供UI界面展示,需要
阅读全文
摘要:GameKit的蓝牙开发注意 ● 只能用于iOS设备之间的连接 ● 只能用于同一个应用程序之间的连接 ● 最好别利用蓝牙发送比较大的数据 /* 关于蓝牙的数据传输 1. 一次性传送,没有中间方法,所谓中间方法值得是,传输进度比例 对于用户而言,选择了传输,就需要等待传输完成,或者传输以失败告终 这就
阅读全文
摘要:● 如果想获得更多的设备信息,比如 ● 设备型号、CPU情况、内存使用情况、硬盘使用情况 ● 是否越狱、装了哪些传感器、当前运行的进程 ● ... ... ● 有2种方法获取更多的设备信息 ● 导入底层的C语言库,通过底层的C语言函数获取(较复杂,需要很多时间去研究) ● 使用第三方库(用OC封装了
阅读全文
摘要:● 监控摇一摇的方法 ● 方法1:通过分析加速计数据来判断是否进行了摇一摇操作(比较复杂) ● 方法2:iOS自带的Shake监控API(非常简单) ● 监控摇一摇的方法 ● 方法1:通过分析加速计数据来判断是否进行了摇一摇操作(比较复杂) ● 方法2:iOS自带的Shake监控API(非常简单)
阅读全文
摘要:加速计 ● 加速计的作用 ● 用于检测设备的运动(比如摇晃) ● 加速计的经典应用场景 ● 摇一摇 ● 计步器 ● 加速计程序的开发 ● 在iOS4以前:使用UIAccelerometer,用法非常简单(到了iOS5就已经过期) ● 从iOS4开始:CoreMotion.framework ● 虽然
阅读全文
摘要:● 什么是传感器 ● 传感器是一种感应\检测装置, 目前已经广泛应用于智能手机上 ● iPhone5中内置的传感器有 ● 运动传感器\加速度传感器\加速计(Motion/Accelerometer Sensor) ● 环境光传感器(Ambient Light Sensor) ● 距离传感器(Prox
阅读全文
摘要:1. 公司标示使用反向域名 正向域名 www.baidu.com 用来标示一台网络主机反向域名 cn.itcast.Mydemo 用来标示产品的cn.com.abc.product因为大家都喜欢好名字 weibo2. Bundle Identifier: 产品唯一标示符Bundle ID = 公司的
阅读全文
摘要:1. 界面分析 1> 需要读取或修改属性的控件需要设置属性// 序号标签// 图片// 图片描述// 左边按钮// 右边按钮2> 需要监听响应事件的对象,需要添加监听方法// 左边按钮// 右边按钮2. 手码懒加载创建控件的步骤 1> 定义控件属性,注意:属性必须是strong的,示例代码如下:@p
阅读全文
摘要:1. 开发前的思路 1> 从mainBundle中加载Plist2> 按照plist中的数据数量先确定各个appView的大小和位置3> 使用代码创建appView中的子控件,并显示内容 2. 关于九宫格布局的计算方法 关于如何计算界面的九宫格布局,其实可以有若干种方法,不必死记课堂的代码,要能够顺
阅读全文
摘要:#import @interface UMSocialSinaHandler : NSObject +(void)openSSOWithRedirectURL:(NSString *)redirectURL; @end #import "AppDelegate.h" #import "UMSocial.h" #import "UMSocialSinaHandler.h" @...
阅读全文
摘要:● 什么是VFL语言 ● VFL全称是Visual Format Language,翻译过来是“可视化格式语言” ● VFL是苹果公司为了简化Autolayout的编码而推出的抽象语言 VFL示例 ● H:[cancelButton(72)]-12-[acceptButton(50)] ● cane
阅读全文
摘要:● Autolayout是一种“自动布局”技术,专门用来布局UI界面的 ● Autolayout自iOS 6开始引入,由于Xcode 4的不给力,当时并没有得到很大推 广 ● 自iOS 7(Xcode 5)开始,Autolayout的开发效率得到很大的提升 ● 苹果官方也推荐开发者尽量使用Autol
阅读全文
摘要:1.如果控件有默认的内容(宽高), 我们只需设置autoalyout的X/Y, autolayout会自动计算出宽高2.Xcode6将Storyboard变成豆腐干的目的:在Xcode6之前, 如果要同时适配iPhone和iPad需要编写两个Storyboard>.Main_iPhone. Stor
阅读全文