简介:iOS的一些基础知识,还有应用管理App的封装版
学习完“下载app” 和 “疯狂猜图“ 这两个应用,相当于自学摸索半年
1、xcode项目结构
Images.xcassets:用于存放图片资源
Supporting Files:除了源代码之外的资源文件的存放路径
3、显示User中资源库的方法
开始使用mac系统进行iOS开发时,会遇到找不到模拟器所在文件夹。那是因为Library被隐藏了,只要在终端输入下面命令就可以实现显示和隐藏了:
1. 打开终端
2. 显示文件夹:chflags nohidden ~/Library
隐藏文件夹:chflags hidden ~/Library (默认是隐藏的)
这样就可以找到资源库文件夹了
4、 修改了系统自带头文件后,Xcode会报错
解决方案:删掉下面文件夹的缓存即可(aplle是电脑的用户名)
/Users/aplle/资源库/Developer/Xcode/DerivedData
或者
/Users/aplle/Library/Developer/Xcode/DerivedData
当然我们也可以直接覆盖原来的文档。Xcode自带头文件的路径:
/Applications/Xcode6-Beta.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator8.0.sdk/System/Library/Frameworks
5、xcode安装插件的方法
直接打开插件,run一下,退出xcode,run again ,Okay!
插件介绍
6、定义属性
// 控件使用weak
@property (nonatomic, weak) UIButton *btn;
// 字符串类型使用copy
@property (nonatomic, copy) NSString *str;
// 其他数据类型(NSArray。。。)使用strong
@property (nonatomic, strong) NSArray *apps;
// 基本数据类型assign
@property (nonatomic, assign) NSArray *apps;
7、自定义构造方法(alloc init.....)都是以(instancetype)开头,构造方法都是返回自定义类型
构造方法需要写if(self = [super init])
8、字典转模型
字典转模型的过程最好封装在模型内部
模型应该提供一个可以传入字典参数的构造方法
- (instancetype)initWithDict:(NSDictionary *)dict;
+ (instancetype)xxxWithDict:(NSDictionary *)dict;
9、instancetype
instancetype在类型表示上,跟id一样,可以表示任何对象类型
instancetype只能用在返回值类型上,不能像id一样用在参数类型上
instancetype比id多一个好处:编译器会检测instancetype的真实类型
#import "MJApp.h"
@implementation MJApp
- (instancetype)initWithDict:(NSDictionary *)dict
{
if (self = [super init]) {
= dict[@"name"];
self.icon = dict[@"icon"];
}
return self;
}
/**
* 这里使用self,self表示谁调用方法代表谁。如果是BJApp的子类调用这个方法,则代表子类
*
* @param dict <#dict description#>
*
* @return 该对象
*/
+ (instancetype)appWithDict:(NSDictionary *)dict
{
return [[self alloc] initWithDict:dict];
}
@end
10、封装项目
// //3. 添加view数据 使用xib
// BJApp *app = self.apps[index];
// UIImageView *iconView = appView.subviews[0];
// iconView.image = [UIImage imageNamed:app.icon];
//
// UILabel *nameLab = appView.subviews[2];
// nameLab.text = ;
我们已经使用xib对代码做了简化,但是数据还是暴漏在外面,
VC对于View得内部结构知道的一清二楚,我们需要对数据进行封装
// //3. 添加view数据 自定义BJAppView对数据进行封装
// BJApp *app = self.apps[index];
//
// appView.iconView.image = [UIImage imageNamed:app.icon];
//
// appView.nameLab.text = ;
//3. 添加view数据 自定义BJAppView对数据进行进一步封装,在setApp方法中设置数据
BJApp *app = self.apps[index];
= app;
11、MVC
控制器负责加载模型数据,然后将数据给View
12、view的封装
如果一个view内部的子控件比较多,一般会考虑自定义一个view,把它内部子控件的创建屏蔽起来,不让外界关心
外界可以传入对应的模型数据给view,view拿到模型数据后给内部的子控件设置对应的数据
#import <UIKit/UIKit.h>
@class MJApp;
/**
* 使用xib的时候,需要将他的继承类改称BJAppView,然后在BJAppView中进行拖线
*/
@interface MJAppView : UIView
/**
* 模型数据
*/
@property (nonatomic, strong) MJApp *app;
+ (instancetype)appView;
/**
* 通过模型数据来创建一个view
*/
+ (instancetype)appViewWithApp:(MJApp *)app;
@end
// 重写模型的set方法,在set方法中将模型数据传递给View
- (void)setApp:(MJApp *)app
{
_app = app;
// 1.设置图标
self.iconView.image = [UIImage imageNamed:app.icon];
// 2.设置名称
Label.text = ;
}
13、加载xib的方法
Xib 文件可以用来描述某一块局部的 UI 界面
•
Xib 文件的加载
方法 1
NSArray *objs = [[NSBundlemainBundle] loadNibNamed:@"MJAppView"owner:niloptions:nil];
UIButton *btn = objs[1];
这个方法会创建xib中的所有对象,并且将对象按顺序放到objs数组中(如果xib如右图所示,那么objs数组中依次会有3个对象:1个UIView、1个UIButton、1个UISwitch)
方法 2
bundle参数可以为nil,默认就是mainbundle
UINib *nib = [UINibnibWithNibName:@"MJAppView"bundle:[NSBundlemainBundle]];
NSArray *objs = [nib instantiateWithOwner:niloptions:nil];
在开发阶段 , 面向开发者的是 xib 文件 ; 当把应 用装到手机上时 ,xib 文件就会转为 nib 文件
14、项目思路
加载数据,设置界面,封装数据
________________________________________________________________________________

该App需要掌握一下几点:
•
UIView
的常见属性和方法
九宫格计算方法
字典转模型
Xib 的使用
自定义 view ( view 的封装)
简单的
MVC
————————————————————————————————————————————————————————————————————
用模型取代字典的好处
使用字典的坏处
一般情况下,设置数据和取出数据都使用“字符串类型的 key ”,编写这些 key 时,编译器不会有任何友善提示,需要手敲
dict[@"name"] =@"Jack";
NSString *name = dict[@"name"];
手敲字符串 key , key 容易写错
Key 如果写错了,编译器不会有任何警告和报错,造成设错数据或者取错数据
使用模型的好处
所谓模型,其实就是数据模型,专门用来存放数据的对象 , 用它来表示数据会更加专业
模型设置数据和取出数据都是通过它的属性,属性名如果写错了,编译器会马上报错,因此,保证了数据的正确性
使用模型访问属性时,编译器会提供一系列的提示,提高编码效率
=@"Jack”;
NSString *name = ;
















