Cocoa编程
sheltonwan
码农
展开
-
cocoa内存管理注意事项
在工作中发现,创建的NSImage对象不再需要的时候调用release,发现其内存并没有马上销毁,而是有一段时间的延迟。因此如果工程导入大量图片的时候,内存会极速膨胀,甚至会因此内存不足。解决这个问题有一个方案,就是使用自动释放池,例如:NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];NSImage* img = [[NSImagealloc] initWithContentsOfFile:@"/Users/samrt/Pictures/婚原创 2010-09-08 10:45:00 · 720 阅读 · 0 评论 -
NSOpenGLContext与QCRender线程安全问题
在编写demo的时候,不经意中将NSOpenGLContext对象与QCRender对象创建于不同的线程,结果导致QCRender对象render失败,没有图像显示,之前检查各个函数返回值均没有发现问题,后来将这两个对象创建于同一个线程则解决了问题,再想起曾经看过某些文档说过,OpenGL多线程是不安全的,因此得出结论,NSOpenGLContext与QCRender必须创建于同一线程。原创 2011-02-21 22:45:00 · 1379 阅读 · 0 评论 -
自定义View刷新问题
<br />实现自定义View时,调用[self setWantsLayer:YES]是很重要的,不然addSubView这些函数调用将会导致界面刷新出现问题原创 2011-03-19 09:58:00 · 1942 阅读 · 0 评论 -
object-c难以理解的一些概念
<br /> <br />1.object-c怎么实现多态<br /> 答:多态是在runtime里面实现的,在编译的时候,compiler把所有class的定义都存放在class 实例对象里面,class实例对象包含了class的父class 实例对象的地址,class方法的select id和地址, class变量的偏移等。所有new出来的object都是从NSObject继承过来的,所以所有对象都自动包含了一个isa的指针,这个指针在调用alloc为object分配地址的时候被指向class对象的地转载 2011-05-20 11:56:00 · 1641 阅读 · 0 评论 -
关于inLiveResize实践的一些经验。
<br />写了一个自定义的View,在该view中添加了许多subview,本以为将该自定义view的自动resize subview标志设为true,它的subview就会自动调整。其实不然,通过调用addSubview来添加的subview都必须重新调整frame大小。原以为将调整subview大小的操作放在inliveResize里能得到想要的结果,最后发现当最大化的时候那些subview的位置总是有问题。而我把这些操作放入drawRect的时候,让inliveResize什么都不做的时候则解决了该原创 2011-04-02 15:24:00 · 973 阅读 · 0 评论 -
QuickTime Movie第一次使用只能在主线程
<br />最近使用QuickTime,发现直接通过创建一个线程来调用QuickTime的函数会报线程相关的错误,网上查找了一下,QuickTime必须在主线程初始化过才能在别的线程调用,否则会出错,调用[QTMovie class]就可以达到初始化。原创 2011-04-10 21:15:00 · 1015 阅读 · 0 评论 -
善用subview代替直接在view上绘制
<br />最近实践发现把太多东西直接绘制到同一个view中不如拆分用subview来处理,也可以将一个类细分。原创 2011-04-13 23:26:00 · 647 阅读 · 0 评论 -
新手学会使用Cocoa帮助文档
<! v/:* {behavior:url(#default#VML);}o/:* {behavior:url(#default#VML);}w/:* {behavior:url(#default#VML);}.shape {behavior:url(#default#VML);}--> Normal 0 fals原创 2011-06-06 10:23:00 · 4345 阅读 · 0 评论 -
关于view的frame
最近写代码无意中发现个问题,添加一个subview作为当前view的子view,那个subview的宽度是有限制,不能无限制增大,若达到临界值,将会出现以下警告:p.p1 {margin: 0.0px 0.0px 0.0px 28.0px; text-indent: -28.0px; font: 11.0px Menlo} -[_NSViewBackingLayer(0x1e3b5420) a={0, 0} p={0, 100.65} b=(0,0,26390,64.35) superlay原创 2011-04-16 15:19:00 · 2918 阅读 · 0 评论 -
为什么inLiveResize一直在跑?
今天调试程序的时候发现cpu不断在刷,后来找到是自定义NSMatrix子类的 inLiveResize 和 DrawRect 一直在被调用。后来追查到真凶,就是在自定义的NSCell子类的drawWithFrame方法中调用了setAttributedStringValue方法。估计该方法会促发重绘消息,因此一直循环重绘。以后在处理绘图函数drawXXX时一定要小心,避免调用到会触发该重绘函数响应的函数,这样的函数应该在重绘函数外调用。p.p1 {margin: 0.0px 0.0px 0.0p原创 2011-04-23 12:55:00 · 919 阅读 · 0 评论 -
关于NSPasteboard的经历
<br />在给NSPasteboard增加数据的时候,一定要先调用clearContents来清除之前的数据,否则原来的数据会给当前的数据造成影响。原创 2011-04-28 11:18:00 · 3432 阅读 · 0 评论 -
makeFirstResponder
p.p1 {margin: 0.0px 0.0px 4.0px 0.0px; font: 19.0px 'Lucida Grande'}p.p2 {margin: 0.0px 0.0px 10.0px 0.0px; font: 13.0px 'Lucida Grande'}p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Courier}p.p4 {margin: 0.0px 0.0px 2.0px 0.0px; font: 13转载 2011-04-28 17:11:00 · 2144 阅读 · 0 评论 -
acceptsFirstMouse
<br />Override this method in a subclass to allow instances to respond to click-through. This allows the user to click on a view in an inactive window, activating the view with one click, instead of clicking first to make the window active and then clickin转载 2011-04-28 17:38:00 · 1102 阅读 · 0 评论 -
关于BeginSheet 的窗口问题
<br />如果要弹出一个自定义的window,可以创建一个新的window xib文件,并通过NSBundle来加载。xib的window属性有一个选项,就是visible at lauch,如果勾选的,执行下面代码时:<br /><br /> [NSBundleloadNibNamed: @"RegisterWindow"owner: self];<br /><br /> [NSAppbeginSheet: sheet<br /> modalForWindow: window<br />原创 2011-05-05 10:33:00 · 3026 阅读 · 0 评论 -
从xcode4.0.2升级到xcode4.1,查看定义无法跳转,出现Symbol Not Found问题!
前两天升级了xcode,到今天才发现了个问题,就是我的工程里,我按住command键加鼠标点击自定义的类或者方法,无法跳转,而弹出 Symbol Not Found这样的提示框。折腾了两三个小时不知道怎么回事。最后我创建了一个新的工程,在新工程下再创建一个自定义类,新的工原创 2011-09-14 15:43:28 · 2146 阅读 · 1 评论 -
关于sheet线程安全问题
- (void)beginSheet:(NSWindow *)sheet modalForWindow:(NSWindow *)docWindow modalDelegate:(id)modalDelegate didEndSelector:(SEL)didEndSele原创 2011-10-11 17:42:17 · 1072 阅读 · 0 评论 -
NSProgressIndicator 进度没有响应!
<br />如果出现此问题,请检查一下你是否运行在多线程环境上,如果是,请调用setUsesThreadedAnimation设置True原创 2011-02-14 16:33:00 · 2876 阅读 · 0 评论 -
嵌入自定义framework到应用程序包中
<br />在实际开发过程中,我们常常要编写自定义的framework。<br />framework写好后会面对着这样一个问题,我的应用程序加载的时候如何能找到我自己写的framework呢?<br /> <br />首先要弄清楚,应用程序加载时寻找framework的路径顺序时怎样的:<br />1、首先从用户自定义路径中寻找<br />2、从/Library/Frameworks中寻找--------第三方framework一般放这里<br />3、从/System/Library/Framework原创 2011-01-24 11:12:00 · 2735 阅读 · 0 评论 -
苹果官方中文参考库
http://www.apple.com.cn/developer/technologies/iphone/原创 2010-09-18 10:42:00 · 1271 阅读 · 0 评论 -
Cocoa编程错误问题:loaded the XX nib but no view was set.
虽然File's Owner的class已经设置为对应的viewController,但是没有链接File's Owner的view插座至对应的custom view。原创 2010-09-25 10:32:00 · 1174 阅读 · 0 评论 -
cocoa编程错误问题:cannot decode object of class (XXX)
<br />遇到该问题请查看是否添加了对应模块的framework,如果不清楚使用模块是哪个模块,请查看帮助文档。原创 2010-09-25 13:28:00 · 2191 阅读 · 1 评论 -
如何实现NSOutlineViewDataSource协议
可以到帮助文档中输入关键字NSOutlineViewDataSource然后在左边枚举栏目zh就可以看到文章:Writing an Outline View Data Source原创 2010-09-25 15:47:00 · 2794 阅读 · 1 评论 -
使用QTKit播放视频就这么简单
没接触过quicktime的人一定不敢相信quicktime的强大,播放视频居然那么容易。简单创建一个工程,只要把QTMovieView这个View拖拽到Windows窗口,然后在文档类中创建一个插座变量QTMovieView,只要在interface builder将其关联起来就行,剩下来的工作就是创建一个QTMovie对象,将该对象设到插座变量QTMovieView中去就可以实现播放了。其代码如下所示: NSString* movieUrl = @"/Users/samrt/Picture原创 2010-11-27 23:34:00 · 2104 阅读 · 0 评论 -
iPhone网络编程初体验-简单的聊天程序
<br /><br />在这篇文章中,我将介绍如何使用TCP/IP协议让iPhone(手机上网)与服务器实现通信,同时以一个简单的聊天程序作为例子进行说明。<br /> 首先使用Xcode常见一个基于视图(View)的应用程序项目,取名Network。<br />使用网络通信流<br /> 使用套接字在网络上通信最简单的方法是使用NSStream类,NSStream类是一个表示流的抽象类,你可以使用它读写数据,它可以用在内存、文件或网络上。使用NSStream类,你可以向服务器写数据,也可以从服务器读取转载 2010-10-12 17:37:00 · 1666 阅读 · 0 评论 -
注意,c++类声明大括号后面必须有“”
在cocoa中声明一个类,出现error: new types may not be defined in a return type这样的错误语句,原因是类声明结束后面的大括号没有分号“;”原创 2010-10-25 13:51:00 · 3238 阅读 · 0 评论 -
SCNetworkReachability OverView
<br /><br />SCNetworkReachability 编程接口允许应用确定系统当前网络配置的状态,还有目标主机的可达性。当由应用发送到网络堆栈的数据包可以离开本地设备的时候,远程主机就可以被认为可以到达。 可达性并不保证数据包一定会被主机接收到。 <br />SCNetworkReachability 编程接口支持同步和异步两种模式。 在同步模式中,可以通过调用SCNetworkReachabilityGetFlag函数来获得可达性状态;在异步模式中,可以调度SCNetworkReachabi翻译 2010-10-31 08:47:00 · 1163 阅读 · 0 评论 -
An NSLock object
<br /><br /> <br /> <br />NSLock对象是用来同步同一个应用内多线程的执行操作。<br />NSLock对象可以用于同步应用全局数据的访问,或者用来保护临界区代码,使其以原子方式运行。<br /> <br />警告:NSLock类使用POSIX线程来实现它的锁行为。当给NSLock对象发送一个unlock消息时,必须保证该消息是从发送初始lock消息的同一个线程发送的。从不同的线程来释放一个锁会导致意想不到的行为。<br /> <br />不要用这个类来实现递归锁,在同一个线程调翻译 2010-10-31 11:09:00 · 2811 阅读 · 0 评论 -
A CFRunLoop object
CFRunLoop 对象监控任务(task)的输入源,并在它们为处理做好准备的时候调度控制。输入源样例可能包括用户输入设备、网络链接、定期或时间延迟事件,还有异步回调。 有3类对象可以被run loop监控:sources、timers、observers。当这些对象需要处理的时候,为了接收回调,首先必须通过 CFRunLoopAddSource,CFRunLoopAddTimer, or CFRunLoopAddObserver把这些对象放入run loop。 要停止接收它的回调,你也可以稍候通过CFR翻译 2010-10-31 17:45:00 · 1495 阅读 · 0 评论 -
An NSMethodSignature object
<br />p.p1 {margin: 0.0px 0.0px 10.0px 0.0px; font: 13.0px 'Lucida Grande'}span.s1 {font: 13.0px Courier; color: #666666}span.s2 {font: 13.0px Courier; color: #3466cc}span.s3 {color: #3466cc}<br />An NSMethodSignature object records type info翻译 2010-11-09 21:25:00 · 932 阅读 · 0 评论 -
NSException
p.p1 {margin: 0.0px 0.0px 10.0px 0.0px; font: 13.0px 'Lucida Grande'}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px 'Lucida Grande'}span.s1 {font: 13.0px Courier; color: #666666}NSException is used to implement exception handling and conta翻译 2010-11-09 21:56:00 · 1169 阅读 · 0 评论 -
CFReadStream and NSInputStream
<br />CFReadStream is “toll-free bridged” with its Cocoa Foundation counterpart, NSInputStream. This means that the Core Foundation type is interchangeable in function or method calls with the bridged Foundation object. Therefore, in a method where you see转载 2010-11-14 13:30:00 · 1935 阅读 · 0 评论 -
CTTelephonyNetworkInfo
<br />Use the CTTelephonyNetworkInfo class to respond to changes in the user’s cellular service provider. This occurs, for example, if a user swaps the device’s SIM card with one from another provider, while your application is running. This class also giv翻译 2010-11-13 21:45:00 · 5419 阅读 · 0 评论 -
如何解决拖拽光标+resizeLeftRightCursor+在拖拽过程中保持不变,不闪烁?
如果要想在拖拽中调用 [[NSCursorresizeLeftRightCursor]set];来使鼠标保持resize的形状那还不够,这时候拖拽的时候会闪烁的。只要在mouseDown中调用“[[NSAppmainWindow]disableCursorRects]原创 2011-10-13 16:18:59 · 1852 阅读 · 1 评论