ios入门

 

           
1:包管理 依赖: cocospods   中文大天朝安装  常用命令
pod instlall  不会更新已经有的pod,只会更新没有的pod
pod update 会全部更新
 
Prepo软件自动生成1,2图片
 
xcode插件目录:~/Library/Application Support/Developer/Shared/Xcode/Plug-ins
xcode插件管理工具: Alcatraz
 
 
2:手动添加依赖
(1)添加依赖库
添加系统依赖库项目名称—>TARGETS—>Build Phases —》 link binary with libraries  ;  《这里不能搜索》
(2) 添加依赖库的头文件
添加依赖库发现还是用不了的时候
Target—>Build Settings (All) —>( Header Search Paths)
 
("$(SDKROOT)/usr/include/libxml2")
以:"$(SRCROOT)/BlueMobiProject/ThirdParty/BaiduMap_IOSSDK_v2.6.0_Lib/Release$(EFFECTIVE_PLATFORM_NAME)/"
不推荐,麻烦的
$(PROJECT_DIR)/BlueMobiProject/ThirdParty/BaiduMap_IOSSDK_v2.7.0_Lib/Release-iphoneos
 
eg 添加了libxml2发现还是没有找不到,按照上面的添加 Library Search Paths
GDateXmlNode.m 使用的时候 1:添加依赖库 2:添加search paths   3:添加非Arc
libxml/tree.h no such file or directory
 
Build Settings--> Search path--> Library Search Paths加lib依赖
 
SRCROOT 和 PROJECT_DIR 都值的是 项目配置目录的上一层
 
好的:模拟器和手机都可 ( Header Search Paths)  
3:Enable Zomble Objects; 检测僵尸对象
 
4:设置有的老的库不用Arc
只需在 TARGETS里的 Build Phases中,找到  Compile Sources,把涉及到非ARC的类后面加上 -fno-objc-arc 标志
 
 
 
----------------------------------------------------------------------
 
 
1:Protocol 类似java的接口
// 继承extends NSObject 实现 Printable和Drawable接口 <>表示实现接口
@interface  class MyClass : N SObject  <Printable, Drawable>
@end
2: 冒号也是方法名的一部分,method和method:是两个不同的方法名
3: 写在.h头文件里的方法都是公开的,Objective-C里没有私有方法的概念
4: selector就是一个方法指针,类似PHP里的动态方法名:
分类可以给一个已经存在的类增加方法,而不用去改它的源码。Java和PHP中都没有类似的特性。
  :继承   <协议> java的接口    ()分类 OC动态语言特性,动态添加方法
6:pch预编译,吧所有include导包放在这里(ios8已经取消)
7:iOS  block 匿名函数
     blokc和函数很像,有返回值,有形参;block是一个数据类型;可以保存代码,调用方式一样用^
8:ios 引用计数
9:OC是假面向对象,是一门 弱语言06-弱语法】  java强类型好学
       说明1: // OC是在运行过程中才会检测对象有没有实现相应的方法,即编译,链接都不会奔溃,只有运行时候才会奔溃
      may not respose 可能没有xx方法
/*
 -[Person test]:  unrecognized selector sent to instance 0x7fd2ea4097c0
 给Person对象发送了一个不能识别的消息:test
 */
    说明2:// 类可以没有声明,但是运行也不会出错
    说明3:父类直接可以调用有子类实例化的方法,OC 弱类型只有警告,可以运行成功;
      NSString * str = [Person run]; //动态绑定不报错,只有警告,但是不推荐
    说明4:OC不存在空指针错误,空指针对象的方法不会调用(野指针,空指针
     空指针nil = 0
     人死不能复生---僵尸对象不能复生
     开启僵尸指针检查功能 Enable Zoombie Objecs
10:slef
/*
 self的用途:
 1> 谁调用了当前方法,self就代表谁
 * self出现在对象方法中,self就代表对象
 * self出现在类方法中,self就代表类
 
 2> 在对象方法利用"self->成员变量名"访问当前对象内部的成员变量
 
 2> [self 方法名]可以调用其他对象方法\类方法
 */
11:继承
基本上所有类的根类是NSObject (基本数据类型,struct 结构体, enum 枚举)
 1> 父类必须声明在子类的前面
 2> 子类不能拥有和父类相同的成员变量
 3> 调用某个方法时,优先去当前类中找,如果找不到,去父类中找
List * list = [ArrayList new];
    [list.ensureCapacity]; //java直接报错,OC不报错,只会编译给出警告(may not respose),并且OC可以运行成功;
  ArrayList * arraylist = (ArrayList * ) list;// 强制转换
  [arraylist ensureCapacity 1];
 
12: OC最重要的内存管理 08内存管理
     1:栈内存不在作用域自动回收;堆内存不会自动回收,除非给对象发送销毁消息
     2:引用计数器:每个对象内部会分配4个自己存储对象的引用个数
     引用计数器操作:retain(引用计数器加1,返回读写本身), release (引用计数器减1) , retainCount (获取引用计数个数);对象死之前调用的方法 dealloc  
     3:自动引用计数:ARC - 自动管理引用计数 automatic Reference Counting
       注意ARC不是java的垃圾自动回收,他是自动引用计数,是编译器特称;是自动dellac relase; 自动 alloc 对应的relase;
       1> 强指针 对象只要没有强指针引用就立刻被释放
        2>弱指针 弱指针不能觉得释放释放对象  _ _ weak
     __weak NSData *data = [[ Person alloc ] init ]; // 弱指针,对象以创建就立马释放掉;无用的写法
/*
 ARC的判断准则:只要没有强指针指向对象,就会释放对象
 1.ARC 特点
 1> 不允许调用 release retain retainCount
 2>
允许重写 dealloc ,但是不允许调用 [super dealloc]
 3> @property
的参数
 * strong :成员变量是强指针(适用于 OC 对象类型)
 * weak :成员变量是弱指针(适用于 OC 对象类型)
 * assign : 适用于非 OC 对象类型
 4> 以前的 retain 改为用 strong
 
 
指针分 2 种:
 1> 强指针:默认情况下,所有的指针都是强指针 __strong
 2> 弱指针:__weak
 */
/*
 1.方法的基本使用
 1> retain :计数器+1,会返回对象本身
 2> release :计数器-1,没有返回值
 3> retainCount :获取当前的计数器
 4> dealloc
  * 当一个对象要被回收的时候,就会调用
  * 一定要调用[super dealloc],这句调用要放在最后面
参见内存管理 student.m
 
 2.概念
 1> 僵尸对象 :所占用内存已经被回收的对象,僵尸对象不能再使用
 2> 野指针 :指向僵尸对象(不可用内存)的指针,给野指针发送消息会报错(EXC_BAD_ACCESS
 3> 空指针 :没有指向任何东西的指针(存储的东西是nil、NULL、0),给空指针发送消息不会报错
 
 */
 
13:类修改名称如何操作
修改名称,会导致 实现类,引用的地方都会出错
 
14:NSObject学习
       dealloc 
 
15:set get 方法,牵扯内存管理
@property NSString * myGirlName; 有property方式声明并且没有手动同时实现get,set方法的会自动生成_myGirlName和get,set方法;
同类型的参数只能写一个i
/*
 1.set
方法内存管理相关的参数
 * retain : release 旧值, retain 新值(适用于 OC 对象类型)
 * assign : 直接赋值(默认,适用于非 OC 对象类型)
 * copy   : release 旧值, copy 新值 
 
 2.
是否要生成 set 方法
 * readwrite : 同时生成setter和getter的声明、实现(默认)
 * readonly  : 只会生成getter的声明、实现   只读,不允许修改
 
 3.多线程管理  ios屏蔽了直接管理多线程的管理
 * nonatomic : 性能高 ( 一般就用这个 ) 不会自动生成多线程加锁之类的代码
 * atomic    :
性能低(默认
 
 4.setter
getter 方法的名称 只影响方法名,不影响自动生成成员变量名称,一般用在Bool类型的时候
 * setter : 决定了 set 方法的名称,一定要有个冒号 :
 * getter : 决定了get方法的名称(一般用在BOOL类型)
 *  @property (getter=isRich) BOOL rich; // 常用在 BOOL getter 方法
 */
@interface Person : NSObject
// 返回 BOOL 类型的方法名一般以 is 开头
@property (getter = isRich) BOOL rich;
//
@property (nonatomic, assign, readwrite) int weight;
// setWeight:
// weight
//
@property (readwrite, assign) int height;
@property (nonatomic, assign) int age;
@property (retain) NSString *name;
@end
 
15:include 循环引用(你引用我,我引用你,死循环 Card Person)?? 内存管理
/*
 1.@class
的作用:仅仅告诉编译器,某个名称是一个类
 @class Person; // 仅仅告诉编译器,Person是一个类
 
 2. 开发中引用一个类的规范
 1> .h 文件中用 @class 来声明类
 2> .m 文件中用 #import 来包含类的所有东西
 
 3.两端循环引用解决方案
  p.card = card;  c.person = person;
 1> 一端用 retain
 2> 一端用assign
 */
 
@autoreleasepool 自动释放池:只有在自动释放迟销毁的时候,放在该池子中的所有对象 release一次;大内存数据不要放在池中
autorelase 返回该对象,吧当前该对象放到自动释放池中,不会影响 引用计数 的个数;
 
16:协议
protocal 协议 只声明方法,供别的类实现,只有.h文件; 遵守协议,相当java的实现接口
协议只能写方法
<ProtocalName> 遵守协议  代理模式和观察者模式
@optional @require 默认的
最好都遵循基协议 NSObject 协议
/*
 1.
协议的定义
 @protocol 协议名称 <NSObject>
 //
方法声明列表 ....
 @end
 2. 如何遵守协议
 1> 类遵守协议
 @interface 类名 : 父类名 <协议名称1, 协议名称2>
 @end
 
 2>
协议遵守协议
 @protocol 协议名称 <其他协议名称1, 其他协议名称2>
 @end
 
 3.
协议中方法声明的关键字
 1> @required ( 默认 )
 
要求实现,如果没有实现,会发出警告
 
 2> @optional
 
不要求实现,怎样不会有警告
 
 4.
定义一个变量的时候,限制这个变量保存的对象遵守某个协议
  类名 < 协议名称 > * 变量名 ;
 id<
协议名称 > 变量名 ;
 NSObject<MyProtocol> *obj;
 id<MyProtocol> obj2;
 
 
如果没有遵守对应的协议,编译器会警告
 
 5.@property
中声明的属性也可用做一个遵守协议的限制
 @property (nonatomic, strong) 类名 < 协议名称 > * 属性名 ;
 @property (nonatomic, strong) id<
协议名称 > 属性名 ;
 
 @property (nonatomic, strong) Dog<MyProtocol> *dog;
 @property (nonatomic, strong) id<MyProtocol> dog2;
 
 6.
协议可用定义在单独 .h 文件中,也可用定义在某个类中
 1> 如果这个协议只用在某个类中,应该把协议定义在该类中
 
 2>
如果这个协议用在很多类中,就应该定义在单独文件中
 
 7.
分类可用定义在单独 .h .m 文件中,也可用定义在原来类中
 1> 一般情况下,都是定义在单独文件
 2> 定义在原来类中的分类,只要求能看懂语法
 */

17: tableview如何实现不复用

//变成不复用的tableview; 这里图片复用有bug
//StoreEvaluateTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:[StoreEvaluateTableViewCell nameForClass]];
NSString *cellId = [NSString stringWithFormat:@"%@-%zd",[StoreEvaluateTableViewCell nameForClass], indexPath.row];
StoreEvaluateTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId];
if (cell == nil) {
    cell = [[StoreEvaluateTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:[StoreEvaluateTableViewCell nameForClass]];
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dazer007

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值