摘要:编译模拟器版本1 到https://github.com/yuvi/gas-preprocessor下载gas-preprocessor.p并拷贝到/usr/sbin目录中2 下载ffmpeg源码。http://ffmpeg.org/download.htmlhttps://github.com/FFmpeg/FFmpeg3 解压源码,cd到源码目录下4 创建文件config_i386.sh,其内容如下#!/bin/tcsh -fset targetDir="../ffmpeg-libs/i386"if (! -d $targetDir ) mkdir $targetDir
阅读全文
随笔分类 - Mac/IOS
摘要:实验一pthread在iOS上是否可以像在linux上一样使用?有如下代码://a.h#ifndef __A_H__#define __A_H__void testSleep(int t);void testPthread(int n);#endif//a.c#include "a.h"#include <stdio.h>#include <pthread.h>#include <unistd.h>#include <stdlib.h>void testSleep(int t){ printf("testSleep:
阅读全文
摘要:如何将数据持久化存储在iOS系统上,Cocoa提供了4种机制:1 NSUserdefaults主要用来存储一些短小的信息,例如应用程序设置和属性及用户数据。2 属性列表以列表的形式把数据存储到磁盘上。属性列表类包括NSArray, NSDictionary, NSString, NSNumber, NSDate, NSdata。这些类型的数据可用直接调用writeToFile和相应的加载函数来存储到磁盘和从磁盘读出。相应的加载函数有:arrayWithContentsOfFile:dictionaryWithContentsOfFile:stringWithContentsOfFile:dat
阅读全文
摘要:委托(delegate)是一种对象,另一个类的对象会要求委托对象执行它的某些操作。创建一个“NSObject”类别称为创建一个非正式协议。任何实现“NSObject”类别中的方法的类的对象都可以成为委托对象。因为在Objective-C中所有的类都是NSObject的子类。当你想要向委托对象发送消息时,最好先检查该对象是否理解你将要发送的消息。if ([delegate respondsToSelector: @selector(...)]{ [delegate ...];}正式协议:通过在@protocol部分列出一组方法名来定义一个正式协议。通过在@interface声明中的类名之后列出.
阅读全文
摘要:类别是个很伟大的概念。使用类别可以为任何一个类添加新方法,包括那些你没有源代码的方法。这非常方便。想要为某个类添加新方法时,我们通常的做法是创建子类。但有时,子类不方便。你可能不能创建一个子类的对象。你可能使用的是框架和工具包,因此无法处理新类的对象。类别的声明:@interface UIImage (ImageTransform)-(UIimage *)transformToSize:(NSSize *)size@end现有的类位于@interface关键字之后,其后是位于圆括号中的一个新名称。类的名称可是任意,这个名称大概没有什么实际作用吧,仅仅是一个标示符。当然具有实际意义的标示符可以指
阅读全文
摘要:@property预编译指令的作用是自动声明属性的setter和getter方法有时候需要声明相应的实例变量什么时候需要声明实例变量呢?看下面一个例子:@interface Foo: NSObject@property t;@@implmentation Foo- (NSInteger)t{ ...}- (void)setT:(NSInteger)newT{ ...}@end相应的setter, getter方法怎么实现呢? 这里没有用@systhesize自动合成如果是这样的实现- (void)setT:(NSInteger)newT{ self.t = newT;}那么这个函...
阅读全文
摘要:流程:1 开发好要发布的程序 -- 需要在程序中包含符合要求规格的icon文件https://developer.apple.com/library/ios/#qa/qa2010/qa1686.html2 iTune上注册APP,这一步需要Apple developer IDhttps://developer.apple.com/devcenter/ios/index.action登录之后进入 iTunes Connect登录之后选择管理你的应用程序选择添加新的应用程序首先需要填写如下信息App Name必须是App Store未使用的,你填入的时候,系统会检查。基于这一点可以考虑把第二步和第
阅读全文
摘要:xmpp文件传输主要有两种方法:1 socks5 bytestreams 对应的协议是XEP-00652 In-Band Bytestreams(ibb) 对应的协议是XEP-0047socks5 Bytestreams方法的优点是效率高,但是跨网段传输时需要一个文件代理。像openfire服务器就自带有文件代理,所以这个容易实现。同网段传输可以直接连接,一般的实现是发起端建一个socks5服务。实际使用该方法时还需要使用XEP-0095协议来初始化流。XMPPFramework未包含XEP-0095这个协议的实现,需要自己定义。In-Band Bytestreams的优点是实现简单,但是效率
阅读全文
摘要:相关的配置项是:选择左下角的“编辑属性”再选择系统属性xmpp.proxy.externalip这个属性就是指定文件代理的地址如果没有这个属性,则手动添加正确的设置是:设置为公共ip或一个公共域名(公共:就是整个因特网可见的, 如果是一个内网ip,那么不同网段的客户端就没法连接到这个ip),看网上的一些说法是设置为proxy.domain,这要保证你的这个域名proxy.domain是公共的。否则直接设置为服务器的ip。当然好的做法应该是保证proxy.domain是公共的(不过涉及要域名的申请)。如果没有设置这个选项,那么查询代理时,返回的地址就是127.0.0.1。设置不正确的话,不同网段
阅读全文
摘要:1 带内注册(In-band registration)的概念带内注册指的是未在你的服务器上开通账号的用户可以通过xmpp协议注册新账号。相反的概念是带外注册(out-of-band registration),例如你必须到某个指定的web页面进行注册。如果服务器允许带内注册,那么我们就可以通过自己开发的客户端注册新账号。与带内注册相关的协议是XEP-0077。2 使用XMPPFramework进行带内注册XMPPStream.h中声明了进行简单带内注册(提供用户名和密码进行注册)的函数- (BOOL)registerWithPassword:(NSString *)password erro
阅读全文
摘要:Popover 与 Modal view (模态视图)Popover view: 点击视图外的地方,popover view就会消失。popover view的显示:PopoverViewController *controller = [[self storyboard] instantiateViewControllerWithIdentifier:@"PopoverView"]; [controller setDelegate:self]; UIPopoverController *popoverController = [[U...
阅读全文
摘要:《转》以文档的观点来看,客户端或服务器发送的所有XML文本连缀在一起,从<stream>到</stream>构成了一个完整的XML文档。其中的stream标签就是所谓的XML Stream。在<stream>与</stream>中间的那些<message>...</message>这样的XML元素就是所谓的XML Stanza(XML节)。XMPP核心协议通信的基本模式就是先建立一个stream,然后协商一堆安全之类的东西,中间通信过程就是客户端发送XML Stanza,一个接一个的。服务器根据客户端发送的信息以及程序的逻
阅读全文
摘要:窗口窗口和视图被用来表示应用程序的可视内容和管理与用户的直接交互。一个窗口是一个UIWindow类的实例。本身是不可见的。用来承载一个或多个视图。窗口覆盖整个屏幕。极大多数的iOS应用程序只有一个窗口。视图一个视图是一个UIView类的实例,定义了应用程序窗口上的一块矩形区域。视图在其矩形区域内显示内容,有一些可以变化的属性,并能收到触击事件。视图同样可以有一系列的子视图。许多的用户接口类是UIView类的子类。我们可以通过把层次结构把多个UI元素组合在一起来构造复杂的UI。如下图:图片来源:《iPhone.and.iPad App.24-Hour.Trainer》MVC模式iOS编程最常用到
阅读全文
摘要:。事件驱动iOS编程是基于事件驱动的。我们所要做的事情就是写代码响应相应的事件。每当用户操作应用程序时,设备就会产生事件。例如当用户点击一个按钮时,设备就会产生一个相应的“触击”事件并发送给应用程序。事件不仅仅来自用户的直接交互,像来电、电量不足、文件下载完成等也会产生事件。实际上在IOS设备上发生的任何事情最终都会产生一个或多个事件。当一个事件产生时, 操作系统会检查你的程序,看看是否某个类中的某个方法应该被通知。iOS编程的关键是知道有些什么事件?以及怎样设置我们的方法,以便当这些事件发生时,让相应的方法被调用?理解程序的生命周期是很关键的。下图简单显示了一个程序从启动到结束的事件流:在程
阅读全文
摘要:一个Table View一般要设置其dataSource和delegate.可以通过Control+drag来设置并采用两个协议@interface SecondViewController : UIViewController<UITableViewDelegate, UITableViewDataSource>UITableViewDelegate协议定义的方法中常用的有:// Called after the user changes the selection.- (void)tableView:(UITableView *)tableView didSelectRowAt
阅读全文
摘要:CoreData提供了一种简便的对象持久化管理方法,使你可以不用关心数据的存储,只需要关心对象的增加、删除、更改、读写。基本概念托管对象(managed object)一个托管对象代表你想要保存到数据存储中的一个对象。这在概念上类似于SQL中的一条记录, 并且通常也包含一些域,这些域对应于你想要保存的对象的属性。数据存储(data store)Core Data支持4中类型的数据存储:SQLiteStore, XMLStore, BinaryStore, InMemoryStore。托管对象上下文(managed object context)托管对象上下文类似于应用程序和数据存储之间的一块缓
阅读全文
摘要:1 点击背景时关闭键盘在viewDidLoad中添加手势识别器// add tap gesture recognizer UITapGestureRecognizer* tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleBackgroundTap:)]; tapRecogni...
阅读全文
摘要:xmppframework是XMPP协议的一个objective-c实现.要了解xmppframework, 从这里开始吧:https://github.com/robbiehanson/XMPPFramework/wiki/IntroToFrameworkXMPPFramework中包含了一个简单的iPhone客户端实现。在iPhoneXMPP中。在测试这个Demo过程中要注意的地方是:如上图要设置HostName(如果服务器域名是对外可见的应该不用)。我测试时,因为我是自己建的openfire服务器,设置的服务器名称是没有登记的。所以需要告诉系统怎么找到这个服务器 -- 在hosts文件中
阅读全文
摘要:1 首先下载xmppframework这个框架https://github.com/robbiehanson/XMPPFramework2 环境配置参考:https://github.com/robbiehanson/XMPPFramework/wiki/GettingStarted_iOS1 添加xmppframework框架到工程中将下面的文件拖入工程中其中Extension中的模块可以选择添加(只添加当前工程需要的模块)xmppframework设计是模块化的, 包括核心和扩展, 第三方开发人员可以方便的添加自己的扩展实现;同时开发人员也只需要添加自己工程需要的模块. 一般扩展都会依赖一
阅读全文
摘要:1 一个应用程序是怎么启动的?当我们基于xcode模版创建应用程序时,应用程序启动时大部分的环境参数会被自动设定。例如,xcode创建了一个应用程序对象(除此之外,还会做其它一些事情),该应用程序对象建立了一个运行循环(运行循环登记输入源并使得输入事件传递到你的应用程序中)。极大部分的事情是在UIApplicationMain中完成的。该函数由UIKit框架提供并在项目的main.m源文件中被自动调用。UIkit框架提供了一个应用程序需要构建和管理它的用户接口的所有类(启动、结束应用程序,控制界面和触点事件)。UIkit是Cocoa Touch提供的众多面向对象框架中的一个。Cocoa Tou
阅读全文