2013-01-04 22:03:56| 分类: 默认分类|字号订阅。
感谢这位大大
iphone开发中,自定义协议有什么用?
iphone开发中,自定义协议。
自定义协议语法如下:
protocol 协议名称。
方法之声明。
endobjective-c2.0中协议的新特性:(1)@optional预编译指令:表示可以选择实现的方法(2)@required预编译指令:表示必须强制实现的方法。
例如:protocol frameworkdelegate
optional //可选的(正式协议) 有这个做标志。
(void)didreceivecm:(framework*)framework chatmessage:(chatmessage*)cm;
(void)quserarrived:(framework*)framework addressbook:(nsmutablearray*)ab;
/如果@optional 放在此处,表示上面2个方法内部必须实现,下面2个方法可选。
(void)alluserarrived:(framework*)framework addressbook:(nsmutablearray*)ab;
(void)conversationlistchanged:(framework*)framework conversationlist:(nsmutablearray*)cl;
end协议表示了方法可以被任何类所实现。协议本身不是类。他们只是简单定义了一个其他对象可以实现的接口。当你的类实现了协议中的某个方法的时候也就是说你的类实现了那个协议。
objective-c的另一个扩展称为协议,它非常象j**a中的接口。两者都是通过一个简单的方法声明列表发布一个接口,任何类都可以选择实现。协议中的方法通过其它类实例发送的消息来进行调用。
iphone程序开发里,object-c里的delegate怎么理解?
答:设置**。
然后就可以实现协议了。
相当于c++里实现一个接口,或j**a里实现一个抽象类里的抽象方法。
有些类里不仅可以设置**,还可以为其设置数据源(比如一些模态窗口uiactionsheet之类的)。
有很多时候是需要在b类口中来完成一些对a类的操作, 这时就需要a设个**让b来完成了,这个在应用中很常见也很实用。
nstimer定时器的基本操作方式。
nstimer是cocoa中比较常用的定时器类,基本操作如下:
handletimer方法可以自行定义。在需要的地方创建timer即可,handletimer就可以每0.5秒执行一次。
(void) handletimer: (nstimer *)timer
/在这里进行处理。
nstimer *timer;
timer = nstimer scheduledtimerwithtimeinterval: 0.5
target: self
selector: @selector(handletimer:)
userinfo: nil
repeats: yes];
在cocoa中使用json(重要基础知识)
json是一种新的用于在互联网上进行数据交换的标准格式。由于它的冗余、可读性和可解析性都比xml要好,因此json这种数据交换格式越来越广泛地运用于web应用,尤其是ajax应用中。
在cocoa中使用json也很简单,目前有两个json的框架,都很容易使用,而且都对nsdictionary进行了扩展,您可以选择其一将json“揉”到您的cocoa应用程序里。
一个叫做bsjsonadditions,由blake seely开发。将nsdictionary对象转成json字符串只需要进行如下转换:
dict jsonstrin**alue];
就可以返回一个nsstring的json格式。
反过来如果希望将json字符串转成nsdictionary,只需要进行如下转换:
nsdictionarydictionarywithjsonstring:jsonstring]
就可以返回nsdictionary的对象了。
另一个叫做json-framework,参考了bsjsonadditions,并且以framework的方式提供。
json-framework的用法同样类似,,。
objective-c 内存管理的几点总结(非常重要的基础知识)
1.当你使用 new、alloc 或 copy 创建对象时,对象的 count retain 到 1。你一定要负责把这个对象 release 或 autolease 掉。
这样当它的生命周期结束时,它才能清空。
2.当你使用其他方法获得一个对象时,你可以认为它已经 retain 了一个 count,并且 autolease 掉了。你不用考虑和它相关的清理问题。
但是如果你想保留这个对象,那么你需要 retain 它,并且要确保之后你 release 了这个对象。
3.如果你 retain 一个对象,你最终总是需要 release 或者 autolease 它。
这三条规则在写**的时候一定要遵守,一旦遵守了一般也就不会有内存泄露的问题。
在iphone的平台下,要进行socket开发其实有很多种的方法,开源的库asyncsocket,官方的cfsocket,还有bsd的socket。
视图里两个事件的区别(重要语法知识)
viewdidload事件就是只有产生的时候才响应,重新打开的时候是没响应的。
viewwillappear就是每次出现的时候的消息,在load之后。
顺道写下image的一些用法。
uiimage *iamge=[uiimage imagenamed:@"png"];
iphone开发-nstimer定时器的基本操作方式。
nstimer是cocoa中比较常用的定时器类,基本操作如下:handletimer方法可以自行定义。在需要的地方创建timer即可,handletimer就可以每0.
5秒执行一次。 -void ) handletimer: (nstimer *)timer { 在这。
nstimer是cocoa中比较常用的定时器类,基本操作如下:
handletimer方法可以自行定义。在需要的地方创建timer即可,handletimer就可以每0.5秒执行一次。
(void)handletimer: (nstimer *)timer //
/在这里进行处理。
nstimer *timer;
timer = nstimer scheduledtimerwithtimeinterval: 0.5
target: self
selector: @selector(handletimer:)
userinfo: nil
repeats: yes];
repeates设置成yes的时候会隔0.5s就做一次handletimer,调试的时候就会发现,timer所在的函数和handletimer是来回执行的,个人理解是在这个函数执行完之后才执行这个handletimer的,设置成no时,handlettimer就只执行一次。
theconnection = nsurlconnection alloc] initwithrequest:therequest delegate:self];
nt =[nstimer scheduledtimerwithtimeinterval:20 target: self selector:
@selector(handletimer) userinfo:nilrepeats:no];
(void)handletimer{
(void)connection:(nsurlconnection *)connectiondidreceiveresponse:(nsurlresponse *)response
webdata setlength: 0];
nslog(@"connection:didreceiveresponse:1");
(void)connection:(nsurlconnection *)connectiondidreceivedata:(nsdata*)data
webdata appenddata:data];
nslog(@"connection:didreceivedata:2");
/如果电脑没有连接网络,则出现此信息(不是网络服务器不通)
(void)connection:(nsurlconnection *)connectiondidfailwitherror:(nserror*)error
/nslog(@"error with theconenction");
theconnection release];
theconnection = nil;
webdata release];
webdata = nil;
(void) connectiondidfinishloading:(nsurlconnection*) connection
上面是我在用的时候所涉及的**,只写出了函数,可以自己实验下,看函数的执行顺序以及同异步的关系。
propery讲解。
property是一个属性访问声明,扩号内支持以下几个属性:
1,getter=gettername,setter=settername,设置setter与getter的方法名。
2,readwrite,readonly,设置可供访问级别。
2,assign,setter方法直接赋值,不进行任何retain操作,为了解决原类型与环循引用问题。
3,retain,setter方法对参数进行release旧值再retain新值,所有实现都是这个顺序(cc上有相关资料)
4,copy,setter方法进行copy操作,与retain处理流程一样,先旧值release,再copy出新的对象,retaincount为1。这是为了减少对上下文的依赖而引入的机制。
5,nonatomic,非原子性访问,不加同步,多线程并发访问会提高性能。注意,如果不加此属性,则默认是两个访问方法都为原子型事务访问。锁被加到所属对象实例级(我是这么理解的。
经常备用到的参数是 copy/reain/assign。在其中选择一个来确定属性的setter如何处理这个属性。很多objective-c中的object最好使用用retain,一些特别的object(例如:
string)使用copy。
assign关键字代表setter直接赋值,而不是复制或者保留它。这种机制非常适合一些基本类型,比如nsinteger和cgfloat,或者你并不直接拥有的类型,比如delegates。
readonly关键字代表setter不会被生成, 所以它不可以和 copy/retain/assign组合使用。我们把 summary 定义为 readonly 是因为它并不需要一个专门的类变量,相应的,我们会在用到的时候动态生成它:
定时器。设置定时器下面显示的定时器将在一秒钟后触发,并一直重复直到定时器被禁用。定时器每次激活时,就会调用发送选择器消息的目标来进行初始化。
**方法带有一个参数,就是定时器本身。要禁用一个定时器,给它发送invalidate消息,这将释放定时器对象并把它从当前运行循环中删除。
nstime *timer ;
timer = nstimer scheduledtimerwithtimeinterval:1.0target:
self selector:@selector(handltimer:) userinfo:
nilrepeats:yes];
(void)handletimer:(nstimer *)timer{
printf("timer count: %d", count++)
if(count > 3)
timer invalidate];
英语重要的基础语法知识归纳
英语语法知识要点。谓语 1 由 不及物动词 及物动词 宾语 或 系动词 表语 等构成,说明主语所表示的人物 干什么 或 怎么样 如 he tr elled in space for the first time.他首次在太空旅行。who teaches you english this year?今...
SAT语法备考重要知识点
在sat语法知识点中,有一些知识点是非常重要的,是大家在备考当中一定要关注的。下面小编为大家搜集整理了一些sat语法备考重要知识点,希望对大家有所帮助。1.一致性。sat语法考试中关于一致性知识点的考察是相对比较简单的,而考生在这类知识点中所犯的错误很大的一部分原因可以归结成粗心大意。例如,我们都知...
语文语法知识的重要性
新蔡县宋岗乡宋岗初级中学李海霞。很多老师认为,没有必要在初中语文教学中系统性的学习语法知识,如乐民中学的刘鹏老师就认为,语法知识的学习不是语文学习的基础,刘老师认为,我们没有 本文 必要先让学生学习语法知识再学习语文知识。伍鸿 朱贵英 郭政卢廷贵等老师也认为,语法知识应该随文学习,而不应该系统性学习...