QF——网络之知识碎片

1.URL中文问题:

URL不支持中文。若出现中文,需要对URL进行utf-8编码。

NSString *urlString = [kULRSTRING stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

2.把UIImage转换成二进制数据NSData:

第一行:把png图片转换为二进制数据; 第二行:把jpeg图片转换为二进制数据

  

3.NSString和NSData的互相转换: 


4.一次性设置所有导航条的背景图片:

    [[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"navigationbar"] forBarMetrics:UIBarMetricsDefault];

5.一次性关闭所有导航条的半透明:

  [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

等效于被注释掉的部分:

OC只允许单继承,多接口。

通过继承可以获得其他类的属性和方法;通过实现接口可以获得其他类的方法。

既然OC是单继承的,那我怎么获得多个父类的属性??

—————————————————————————————————————————— 

JSON文档中的数据类型:

“123” ——>NSString

123 ——>NSNumber

null ——>NSNull

—————————————————————————————————————————— 

nil和NULL的区别:

—————————————————————————————————————————— 

用xib创建视图,走的是awakeWithNib构造函数;用代码创建的视图,走的是init构造函数。

 —————————————————————————————————————————— 

怎么获得手机的系统版本?

  float version = [[[UIDevice currentDevice] systemVersion] floatValue];

 —————————————————————————————————————————— 

聊天气泡的拉伸:

  俩参数为设置图片的像素位置,使图片在该点拉伸,而不会整体拉伸。

  - (UIImage *)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight:(NSInteger)topCapHeight;

 —————————————————————————————————————————— 

去掉cel的分割线:

  tabView.separatorStyle = UITableViewCellSeparatorStyleNone; 

 —————————————————————————————————————————— 

使cell无点击选中效果:

    self.selectionStyle = UITableViewCellSelectionStyleNone;

——————————————————————————————————————————  

 iOS观察者模式,及应用(通知中心,KVO,Delegate):  http://blog.csdn.net/xdrt81y/article/details/24039163

  当我们对某对象的属性改变敏感时,可以给它注册观察者,当该对象的属性值发生变化时,会通知我们,会自动调用回调函数。

  1.给某对象注册观察者,观察它的某属性; 

——————————————————————————————————————————  

根据文本内容,自动计算其尺寸:

- (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options attributes:(NSDictionary *)attributes context:(NSStringDrawingContext *)context 

—————————————————————————————————————————— 

在block外创建的对象,不能在block里直接使用,因为block和主程序执行是异步的,block执行时该对象已被销毁。所以说,,,__block 关键字的本质是拷贝了一份原来对象么???

————————————————————————————————————————————

 

————————————————————————————————————————————

iPad开发与适配:

  分割视图,需要同时存在两个viewController. 和tabbarViewController很相似,相当于一个容器,里面可以装VC和navC

  webView,也是继承自scrollView。只要能滚动的视图都继承自scrollView,

 

—————————————————————————————————————————

  根据字符串str,求以它为前缀的字符串。

—————————————————————————————————————————

常见容器视图:

  UITabBarController, UINavigationController(导航控制器), UISplitViewController (分割视图,ipad)

—————————————————————————————————————————

iOS的国际化:http://www.cnblogs.com/qingjoin/p/3899265.html

—————————————————————————————————————————

storyboard,它和xib的区别:

在一个storyboard里可以布局多个界面视图,并且能清晰的体现他们之间的关系结构,而且storyboard能完成界面跳转。

界面跳转:segue

点击进入链接

push,modal,custom三种跳转方式的区别?

—————————————————————————————————————————

代码版本管理工具:svn 和 git

svn:

  第一次取代码:checkout;

  更新代码:updata;

  提交代码:commit。

写完自己的代码,先updata再commit。

http://www.cnblogs.com/ludashi/p/4018245.html

 —————————————————————————————————————————

解决键盘遮挡输入框的几种方案:

1.当textfield被点击后弹出键盘,并且使整个view上移键盘的高度。当endediting,隐藏键盘的同时再调低view的高度。

2.利用UIKeyboardDidShowNotification

 —————————————————————————————————————————

学生代码管理

http://10.2.100.8/stuproj/1502/[名字拼音]_PocketKitchen.git

 —————————————————————————————————————————

 id和instancetype的区别:

id是任意类型,类型提升;

instancetype是指生成当前类的类型,是哪个类,就是哪个类型。(若是YWViewController,为什么不写明是YWViewController呢?答案是复制方便。写instancetype是动态实时的获取类型的)

 —————————————————————————————————————————
iOS定制控件:

http://www.cocoachina.com/industry/20131104/7287.html?utm_source=tuicool

http://blog.csdn.net/zhanghanming199038/article/details/8755680

 —————————————————————————————————————————

模态视图控制器:

  —————————————————————————————————————————

以前在做界面中的一条线的方法是通过调整UILabel的宽高来实现的。但更高级的方法是用用绘图API完成。

  —————————————————————————————————————————

iOS响应者链

  —————————————————————————————————————————

很多时候我们要把从网络解析来的dict装入model,这时我们可以利用KVC的setValuesForKeysWithDictionary:方法来一次性的赋值,很方便,但它的弊端是不太安全,若写错key,则key和model里的属性对应不上,就会报错。这时我们应该重写两个方法。

  —————————————————————————————————————————

viewDidLoad方法里一般写:1.初始化一些数据(数组,字典等);2.UI布局;3.加载数据(网络请求或者本地加载)

重写原来的解析器方法,以自定义一个更适合自己的JSON解析器。

AFHTTP,请求网络方法几个步骤,封装成一个方法。是请求网络只需调用这一个方法即可。

网络请求方法GET的返回类型是AFHTTPRequestOperation,但是我们在调用这个GET方法的时候没有使用变量去接收这个返回值。其实这个方法的返回值的主要用于多次中断下载,当你的APP可以一次性下载完时,就不需要它了。若是中间请求网络,下载数据的时候被中断了,下次下载的时候会从这个返回值里取得一些信息。

  —————————————————————————————————————————

从服务器获得的日期格式是yyyy-mm-dd形式的。怎么单独获得day呢?

我首先想到的是通过索引起始位置求子串,但这种方法不太可行,若月份天数有可能有时是一位数,有时是两位数的。

然后想到的是字符串的分割方法   NSArray * array = [str componentsSeparatedByString:@"-"];通过-来分割字符串。

  —————————————————————————————————————————

imageView里的contentMode = UIViewContentModeScaleAsPectFill

—————————————————————————————————————————

CoreData:映射。数据库表和model属性的映射。

FMDB不支持多线程,所以FMDB官方建议使用DatabaseQuene

MFDB批量更新数据库:http://blog.csdn.net/x32sky/article/details/18965155        

—————————————————————————————————————————

在写单例方法时,加锁可以用@sy... 那种方法,但现在比较流行gcd多线程加锁的方式。

    static dispatch_once_t token;

    dispatch_once(&token, ^{

        _appSupport = [[QFAppSupport alloc] init];

    });

—————————————————————————————————————————

iOS 编程实战 最新版 (下载pdf)

—————————————————————————————————————————

present,dismiss和push,pop的区别;

前两者适用于所有的界面,而后两者是导航控制器中的内容,只有该界面是装入导航控制器的,才能用push和pop,它跳转的界面之间是层结构(栈结构);而前两者是跳转的界面是平行的。

—————————————————————————————————————————

cookMenuVC.title = @"菜谱";这样写在tabBar和navBar中都会有title;

cookMenuNavC.tabBarItem.title = @"ca"; 这样写只在tabBar中又title

—————————————————————————————————————————

原子性,非原子性。

—————————————————————————————————————————

iOS7以后默认都有返回滑动手势,在屏幕左边缘向右滑动,就会返回上一层页面(相当于pop)。但是如果自定义了navgationBar的Back按钮,则就关闭了该返回手势,所以,此时我们得手动开启它。

—————————————————————————————————————————

iOS里实现回调的方式:

1.代理

2.block

—————————————————————————————————————————

GCD:

dispatch_async( ) 异步:函数会立即返回,block会异步执行,不阻塞

dispatch_sync( ) 同步:函数会等待执行完毕后再返回,阻塞

GCD中三种队列:主队列,全局队列,自创建队列

串行队列,并发队列

http://blog.csdn.net/springpp1990/article/details/12451913

http://www.cnblogs.com/sell/archive/2013/02/06/2905693.html

—————————————————————————————————————————

 APP上线后,经常会升级更新,而且数据库中的表可能会发现变化,所以要做数据库版本的控制。

APP的图标,和启动页

修改APP的名字

——————————————————————————————————————————

Core Animation

CALayer

锚点

给CollectionView添加Header

http://my.oschina.net/zboy/blog/221525

开发证书,推送证书,配置文件。

真机测试

——————————————————————————————————————————

——————————————————————————————————————————

 iOS 支付宝开发步骤:

  1.去官网注册合约账号,注册后会有

——————————————————————————————————————————

这两行代码都是在iOS7下修改navigationBar的背景颜色的。

    self.navigationController.navigationBar.backgroundColor = [UIColor greenColor];

    self.navigationController.navigationBar.barTintColor = [UIColor whiteColor];

——————————————————————————————————————————

设置navigationBar的文字颜色,文字字体,文字阴影等

    self.navigationController.navigationBar.titleTextAttributes = @{UITextAttributeTextColor:[UIColor whiteColor]};(会报异常)

    self.navigationController.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName:[UIColor whiteColor]};(不会报异常)

 更多设置:http://www.41443.com/HTML/iphone/20141221/253422.html

    导航条的半透明开关闭到底是哪个?? self.extendedLayoutIncludesOpaqueBars = YES;

——————————————————————————————————————————

用代码实现AutoLayout

VFL语言

但是这些都很繁琐,实际开发中我们一般使用自动布局的第三方库Masonry,用Masonry设置约束

第三方库管理插件

 

——————————————————————————————————————————

第三方登录:QQ登录

http://blog.sina.com.cn/s/blog_92ac2c5b0101cly9.html

——————————————————————————————————————————

http://blog.csdn.net/totogo2010/article/details/7645693

 

——————————————————————————————————————————

当自定义的视图不是控制器时,它使没有initWithNibName这个构造方法的,要想初始化xib文件,可以使用

    NSArray * arr = [[NSBundle mainBundle] loadNibNamed:@"" owner:self options:nil];

——————————————————————————————————————————

[NSString stringWithUTF8String:object_getClassName(self)] 这行可以判断当前类,所以在base中判断当前类就行了,

——————————————————————————————————————————

把返回结果的处理封装在block里,(把block用typed定义成类型,然后用block作返回处理)。

——————————————————————————————————————————

pch文件,(precompiled header)预编译头文件(放置重复import,重复编译)

xcode6之后,创建项目后不会自动帮我们创建.pch文件了,当我们需要时,要我们自己手动创建。

——————————————————————————————————————————

把解析的dict给model赋值,简便方法是使用KVC,model对象调用setValuesForKeysWithDictionary:

使用KVC需要注意的地方:

1.字段要对应,若字段不对应会奔溃。需要重写forUndefinedKey:方法,若,则不需要为他赋值

——————————————————————————————————————————

回调函数一般有两种方式实现:代理模式和block  

对block进行内存管理,要使用copy。

——————————————————————————————————————————

initWithNibName等几个函数的区别:

http://www.cnblogs.com/geraldzhang/archive/2011/09/21/2183970.html

——————————————————————————————————————————

runloop:

——————————————————————————————————————————

  block的生命周期和内存管理  

    http://www.tanhao.me/pieces/310.html/

    http://www.cnblogs.com/tangbinblog/archive/2012/12/31/2840690.html

  初始化时是在栈上,进行copy操作是为了把block从栈上拷贝到堆上使用

  可以使用typedef定义一个block类型,便于后续使用,不过一般情况下我们不用这样,就像系统SDK一样,int (^)(int x, int y) myblock

  在block有时会陷入强引用循环的僵局,造成对象无法被释放的僵局。

  

typedef int(^Myblock) (int, int);

Myblock mb = ^(int x, int y){

};

——————————————————————————————————————————

1.若不是iOS7以上的应用则不通过上线;

2.若不适配iphone6以上,则不通过上线;

3.若应用不支持arm64设备架构,则不通过上线

——————————————————————————————————————————

任务:

  换头像(图片选取器);

  第三方登录:QQ

  第三方分享:在专题详情界面添加分享功能ShareSdk

  第三方支付:

  autolayout 以及Masonry;

  定位与第三方地图接口;(LBS)

  远程推送的原理 (APNs)

  即时通讯(XMPP)

  苹果有关的所有证书。

  第三方类库管理cocopods     http://blog.csdn.net/meegomeego/article/details/24005567

  多线程,runloop

  反射机制

  NSArray和NSMutableArray在内存中的不同 :

    前者在内存中的数据结构是List,它是连续的,分配的内存是固定的;

    后者在内存中的数据结构是链表,它是不连续的。

  isMemberOfClass

  视图响应链

  事件传递机制

  drawRect方法

  iOS数据库,sqlite和CoreData

  第一响应者

  应用上线的操作流程

  代码版本控制:svn和git

 

 

 

  触摸事件的传递:由父视图传向子视图(由下而上)。若父控件不能接收触摸事件,则子控件就不可能接收到触摸事件。

 

 

  友盟的社会化分享,第三方登录,第三方推送 

  环信(第三方即时通讯)

 

 

 

 

 

 

    

 

 

  

  

 

 

 

原文地址:https://www.cnblogs.com/wangerxiansheng/p/4387431.html