- 驼峰命名 UserSexMan
- NSIntegerNSUInteger CGFLOAT
- 枚举 typedef NS_ENUM(NSInteger,UserSex){UserSexMan,UserSexWoman}
- 字符串 copy
- –(instancetype)initwith构造方法 ,+(instancetype)modelwith
- Readonly 和 readwrite
- 都针对对象,Strong持有对象所有权,weak不持有对象所有权
- Weak使用时:委托规避循环引
- Storyboard 拖拽控件使用weak
- Assign修饰任意类型指针 weak指针对象如果被释放 weak指针自动置为nil assign不会自动置为nil需要手动
- Copy(不可变副本) block函数使用 栈区分配小内存nsstringnsarraynsdictionary存在可变类型需要使用mutablecopy(可变副本)
- Arc下 weak在dealloc中不需要对其置为nil
- Atomic 线程安全的处理 加了个锁 【lock lock】 ,非多线程nonatomic
- Nsstringfromclass(【self class】)Self 是当前对象类型名称 super 当前响应消息对象(还是该对象)的父类方法
- Class结构体 类的isa指针指向描述一个源类(subclass)(属性列表 方法列表)
- 类方法属于类对象 实例方法属于实例对象 类方法类对象调用 实例方法实例对象调用,类方法self表示类对象 实例方法self表示实例对象 类方法不可以方位成员变量 实例方法可以访问成员变量 类方法可以调用类和实例方法 实例方法既可以调用类方法也可以调用实例方法
- @synthesize重命名属性
- Protocol协议中可以使用属性@property 限定协议接口规范 必须实现此属性
- 类别category 中可以使用属性 可以对源类的成员变量和属性公开化
- Runtime运行时 可以在运行中添加对象属性obj_setassociatedobject(对象,属性名称,值,类型)obj_getassociatedobject
- 浅复制影子 深复制克隆人 销毁后不一样
- 类别 创建私有方法的向前引用 分散类的实现 非正式协议
- 动态运行时 obj_sendmsg(id reciver ,selector)
- Perfomselector(sel)选择器 间接调用方法
- 懒汉模式 延迟加载 重写get方法
- Frame和bounds cgrect坐标不一样
- 推送
- Tableview 用flag或属性来关联多个表格
- 序列化 Plist文件 coredata sqlite3 nsuserdefault plist识别自定义对象(序列化 ) nsdata data=[nskeyedarchiver archiveddatawithrootobject:对象] 对象必须遵守协议nscoding encodewithcoder 解挡 initwithcoder
- 安全释放 需要将指针置空 p release p=nil
- 响应者链 userinteractionenabled=yes 开启响应者链中加按钮点击事件
- Imagenamed花费内存大 (小图)imagewithcontentsoffile自动释放池和initwithcontentsoffile 手动释放
- 沙盒 documents 配置信息 开机动画 背景音乐 plist 图片 library 用户缓存和下载 tmp临时数据
- Strong 计数n+1 源对象更新strong会更新
- Socket tcpudp服务器监听 等待循环 客户端请求链接ip和端口 连接确认握手
- 代理委托
- 委托人定义协议委托@protocol entruster_viewcontrollerdelegate<object> -(void)showmsg; @end ,
- 执行人是谁@propery(assign,nonatomic)id<entruster_viewcontrollerdalegate> delegate;
- 拜托执行人做某事-(void)tellsomeonedosomthing;{判断执行人能够做某事if(self。Delegate respondstoselector:@selector(showmsg)){self。Delegate performselector:@seletor(showmsg)}}
- 执行人实现协议<entruster_viewcontrollerdelegate> ,-(void)showmsg{nslog(“”);
- 故事中 创建两个人 让委托人的delegate属性执行人是执行人 【委托人 tellsomeonedosomething
- 观察者模式
- 观察者 注册到系统观察者中心[nsnotificationcenter defaultcenter] addobserver:self selector:@selector(shout) name:@”houseburning” object:nil]
- 观察者 -(void)shout{nslog(“dddddddd”)}
- 别观察者 观察者中心发出通知 [nsnotificationgcenter defaultcenter] postnoficationname “@”houserburning”,object:nil]
- 着火 【house burning】
- Mvc model view controller view层构造方法-(instancetype)initwithframe(cgrect)frame中{ 控件成员变量addsubview return self}, 类方法中指定model -(void)setdatamodel:(model_viewcontroller *)datamodel view和model关系 set方法model
- 工厂模式 对象创建的时机 核心方法+(fruit)createfruitwithname:(nsstring)fruitname{class class = nsclassfromstring(fruitname); fruit *tempfruit = [class alloc] init]}; fruit *app = [fruitfactury createfruitwithname:@”apple”];
- 单例模式单例方法 +(Globle*)shareGloble 必须使用单例方法
- Oc支持多重协议 断点调试 控制台输入po 属性 变量 方法
- 懒加载就是重写一个控件的get方法
- Gcd 队列分为并行和串行队列 串行队列是主队列 并行队列是其他除了主队列的收拾并行队列 串行队列是一个执行完毕后才执行后一个 并行队列是一个任务开始后下一个任务才开始执行
- 主线程 dispatch_async(dipathc_get_main_queue().^{1});
- 子线程dispatch_async(dispatch_get_global_queue(DISPATHC_QUEUE_PRIORITY_DEFAULT,0),^{1})
- BOLCK回调typedef void(^block)(void); @property (copy ,nonatomic) Myblock block;
- 控制器__weak Sencondviewcontroller *sec = self 不产生引用计数问题 在block内部使用 block = ^{sec.str=@”1”};
- block赋值时候容易产生循环引用
- 写法 __block int a=0; block函数内部修改外部变量a的值需要在a定义时加__block修饰值a
- Gcd时候必须使用__weak __typeof__(self) weakself = self修饰对象
- Base main(继承tabbarcontroller) home(加自定义navgationcontroller)等业务(storyboard) 分层 和协议层 protocol
- 通过storyboard获取控制器 let childvc = uistoryboard(name:storyname,bundle:nil).instantiateinitialviewcontrollder()! Addchildviewcontriller(childvc)
- Override varpreferredstatusbarstyle:uistausbarstyle重写statusbar
- 设置ui 扩展 单独注释 //MARK:设置UI界面 extension homeviewcontroller{ fileprivate func SetupUi(){setupnavgationbar(….)} fileprivate func SetupNavigationBar(){….}} 事件监听 action:#selector(buntonclick)
- 设置时间监听 //MARK:时间监听 extension homeviewcontroller{@objc fileprivate func buntonclick(){……….}}
- 扩展 import uikit extension UICOLOR{…….}
- 系统类扩充 便利构造函数 convenience init(){init(…..)}
- Guard else
- 单独创建控件view封装 fileprivate var 重写init (titles:[string]){ titles=titles super.init(frame:frame)} 必须实现required init?(coder aDecoder:NSCoder){fatalError} //MARK : 设置UI setupui—-setuptitleview—–setupcontentview
- For _ in 0..<count{ let b=, a.append(b)}
- 存储title样式 参数属性太多 import UIKit class HYTitleStyle{var height:cgfloat=44}
- Swift 懒加载fileprivate lazy varcollectionview:uicollectionview={let layout=,let collecitionview=,datasouce=,registercell,returncollectionview}()
- Self不能省略 1方法中与其它标识有重名 2在闭包中self不能省略
- Collectionviewispagingenabled = true bounces=false scrollstotop=false
- For subview in contentview.subviews remove 先清空在加进去
- For(I,title) in enumerated(){ ….}
- view as! uilable点击的view funcpageview(_ 本身当参数)
- setcontentoffset 滚动位移 offset scollview.scolltoitem滚动到哪个item
- 代理继承class轻量
- 自定义布局 flowlayout waterfall 重写布局 override func prepare()方法准备布局 返回布局 ,一个cell对应一个uicollectionviewlayoutattributes来定义属性位置
- Layoutattributesforelements 返回布局
- Alamofire kingfisher afnetworkingsdwebimg
- 重写navgationcontroller的pushviewcontroller方法 重写pushviewcontroller
- Viewwillappear方法中隐藏头部setnavgationbarhidden 消失时viewwilldisappear 显示
- 取系统手势放入 addgestureregongnizer(interactivepop)取得系统手势tap的action和target:运行时 class_copyivarlist 拷贝所有的属性() 遍历ivar_getname(ivars[int(i)])
- 粒子动画 发射器和粒子 touchesbegan{caemitterlayer发射器 caemittercell 粒子}
- 面向协议开发必须遵守是uiviewcontroller protocol text{} extension text where Self:uiviewcontroller{ func text(){}}
- 代替for let layer=layer.sublayers?.filter({$0.iskind(of:caemitterlayer.self)}).first?.removeFromsuperlayer() 链式编程
- 按钮的开始停止 click(sender){ isselected = !sender.isselected sender.isselected ? start(): stop()}
- Uistackview 控件组
- 协议开发快速创建类方法 class func loadformnib()->Self{} 结构体 枚举 使用静态方法
- 网盘下载
原文地址:https://blog.csdn.net/fsjvshhl/article/details/88557767
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。