@synthesize aProperty, bProperty;
@synthesize cProperty=instanceVariableName;
@dynamic anotherProperty;
// method implementations
@end
示例代码如下:
{
char *enc1 = @encode(int); // enc1 = "i"
char *enc2 = @encode(id); // enc2 = "@"
char *enc3 = @encode(@selector(aMethod)); // enc3 = ":"
// practical example:
CGRect rect = CGRectMake(0, 0, 100, 100);
NSValue *v = [NSValue value:&rect withObjCType:@encode(CGRect)];
}
#import <Foundation/Foundation.h>
#include <stdio.h>
typedef struct node
{
int data;
struct node *next;
}List;//定义一个int类型的结构体,名字为List
List *insert(List *p,List *q);//插入函数,,p新元素插入位置,q 新元素中的数据域内容
List *create(void);//创建函数。
void print(List *head);//打印函数。
List *insert(List *p,List *q)//插入函数
{
List *k,*t;
t=p;
while(t!=NULL)
{
if(t->data>q->data)break;
k=t;
t=t->next;
}
q->next=k->next;
k->next=q;
return p;//p保持是最小的数。p 其实是整个链表。
}
List *create(void)
{
int i=0;
List *head,*p,*q;//p 为链表的元素,q为链表的尾。
head=(List *)malloc(sizeof(List));
q=p=(List *)malloc(sizeof(List));
scanf("%d",&q->data);
q->next=NULL;
while(q->data!=0)//判断尾是否为0;
{
i++;
if(i==1)
head->next=p;
else
{
if(q->data<p->data)//小于的时候使用头插法
{
q->next=p;
head->next=q;
p=q;
}
else p=insert(p,q);//大于的时候使用插入函数
}
q=(List *)malloc(sizeof(List));//每次添加一个尾,就新开辟一个新尾的空间。
scanf("%d",&q->data);
}
return head;
}
void print(List *head)
{
List *p;
p=head->next;
while(p!=NULL)
{
printf("%d ",p->data);//P对象的元素值。
p=p->next;//把元素的值赋为下个元素的值。
}
}
int main (int argc, const char * argv[])
{
@autoreleasepool {
int x;
List *head,*p;
printf("请向链表中输入数值,按0结束:\n");
head=create();
printf("得到的链表为:\n") ;
print(head);
printf("\n");
printf("请输入一个数值,插入到链表中:\n");
scanf("%d",&x);
p=(List *)malloc(sizeof(List));
p->data=x;
head=insert(head,p);
printf("插入数值后的链表为:\n");
print(head);
}
return 0;
}
我们开发出来的运行在iOS平台上的应用程序都有一个UIApplication类的对象。
1、是iOS应用程序的起始点,并负责初始化和显示UIWindow;
2、负责加载应用程序的第一个UIView到UIWindow中;
3、帮助管理应用程序的生命周期;
4、接收事件,再转给它的委托"UIApplicationDelegate"来处理;此委托可处理的事件包括:应用程序的生命周期事件如程序启动和关闭、系统事件如来电和记事项警告;
(miki西游 @mikixiyou 原文链接: http://mikixiyou.iteye.com/blog/1742950
)
虽然UIApplication负责接收事件,但它无需我们来修改。而它的负责处理事件的委托类,其遵循UIApplicationDelegate协议,是需要我们进行开发。
例如
应用BirdsApp的委托类的声明如下:
@interface BirdsAppDelegate : UIResponder <UIApplicationDelegate>
这个类需要实现UIApplicationDelegate协议中的方法,用于处理UIApplication接收的事件。
这些方法有很多,大概是这些:
1、应用完成登录的事件处理方法;
2、应用中断的事件处理方法;
3、内存很低的事件处理方法;
4、重要改变发生的事件处理方法;
在开发时,我们需实现的最重要的方法是application:didFinishLaunchingWithOptions:,其他方法也应该去实现,虽然它们都是可选的。
在XCode4.5版中,如果使用它的模板创建项目,Xcode将会为我们创建遵守UIApplicationDelegate协议的方法,这些方法的实现代码需要我们自己去开发。
例如,创建一个名称为BirdsApp的项目,XCode会自动创建BirdsAppDelegate.h和BirdsAppDelegate.m文件。
/*BirdsAppDelegate 应用委托类*/ #import <UIKit/UIKit.h> @class BirdSightingDataController; @class BirdsMasterViewController; @interface BirdsAppDelegate : UIResponder <UIApplicationDelegate> @property (strong, nonatomic) UIWindow *window; @property (strong, nonatomic) BirdSightingDataController *dataController; @property (strong, nonatomic) BirdsMasterViewController *firstViewController; @end #import "BirdsAppDelegate.h" #import "BirdSightingDataController.h" #import "BirdsMasterViewController.h" @implementation BirdsAppDelegate @synthesize window = _window, dataController = _dataController, firstViewController= _firstViewController; - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { UINavigationController *navigationController = (UINavigationController *)self.window.rootViewController; BirdsMasterViewController *firstViewController = (BirdsMasterViewController *)[[navigationController viewControllers] objectAtIndex:0]; BirdSightingDataController *aDataController = [[BirdSightingDataController alloc] init]; firstViewController.dataController = aDataController; self.dataController = aDataController; return YES; } @end
建立在storyboard基础上的应用程序,作为UIApplication类的对象,在启动过程中将进行下列操作。
首先,加载info.plist文件内容到一个NSDictionary对象中,读取字典对象的键UIMainStoryboardFile对应的值得到storyboard配置文件名称,通常文件名称会是MainStoryboard.storyboard。
其次,加载MainStoryboard.storyboard文件,根据文件中记录的第一个视图控制器的值,自动实例化该控制器。该控制器称为主视图控制器。
再次,将主视图控制器的所有的视图使用addSubView方法加载到UIWindow对象中去。
这个时间点,算是完成应用启动,调用应用委托类中的application:didFinishLaunchingWithOptions:的方法。
而以前的应用程序用Interface Builder开发,使用nib管理视图,那么必须在应用委托类中实现加载主视图控制器的所有视图和实例化UIWindow对象的操作。
#import <UIKit/UIKit.h> @interface GuessChildAppDelegate : NSObject <UIApplicationDelegate> { UIWindow *window; UINavigationController* simple_; } @property (nonatomic, retain) UIWindow *window; @end #import "GuessChildAppDelegate.h" #import "WifeBirthdayController.h" @implementation GuessChildAppDelegate @synthesize window; #pragma mark - #pragma mark Application lifecycle -(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { //CGRect frame = [[UIScreen mainScreen] bounds]; window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; WifeBirthdayController* rootViewController = [[[WifeBirthdayController alloc] init] autorelease]; simple_ = [[UINavigationController alloc] initWithRootViewController:rootViewController]; [window addSubview:simple_.view]; // Override point for customization after application launch. [window makeKeyAndVisible]; return YES; } -(void)dealloc { [window release]; [super dealloc]; } @end
本想记录下应用委托类的用法,结果复习了一下应用程序的启动过程。
附一份社会热点评论短文。
《史记. 切糕传》: 贩切糕者, 多为西域人也。富可敌国。其业暴利,因有民曰:「一两五十,一刀三斤。」更有甚者曰:「一刀杨幂上床, 两刀帝都买房,三刀兰博到手,四刀盖茨认娘」。 故欧美人遇奢侈且无力购买之物时大多惊呼:「哦,卖糕的!」