Mac开发NSButton学习笔记

新建项目StudyUI

  1. 和IOS项目一样,新建工程StudyUI 不适用storyboard
  2. 新建文件MainMenuView继承NSView
  3. 设置如下图
    image

NSButton属性

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
- (void)drawRect:(NSRect)dirtyRect {
[super drawRect:dirtyRect];

// Drawing code here.

NSButton *button=[[NSButton alloc]initWithFrame:NSMakeRect(100, 100, 100, 100)];
[button setButtonType: NSMomentaryPushInButton];//集中样式看API
button.bezelStyle=NSRoundRectBezelStyle;
[button setBordered: NO];//默认有边框 因为设置图片所有去掉边框
[button setTarget:self];
[button setAction:@selector(hehe:)];//设置按钮点击事件
[button setTag:10];
//[button setTitle:@"我不是按钮"];
[button setImage:[NSImage imageNamed:@"Emacs.png"]];
//下面这个是设置图片裁剪自适应 如果不加这句话图片是300*300 按钮大小是100*100那么现实的只是图片的局部
[[button cell] setImageScaling:NSImageScaleAxesIndependently];

[button setImagePosition:NSImageOnly];
[self addSubview:button];
// [self.window.contentView addSubview: button];
}
-(void)hehe:(id)sender{
NSLog(@"hehe");
}

也可以使用拖拽线的方式设置按钮事件 还可以设置属性。

one

刚刚灵光一闪,想到一个绝佳创意。建立一个网站叫做壹元购,每天推一到两款产品,比如iPhone5s手机5000元。只要超过5230个人购买就生效,否则参与的一元钱退还。超过的话就抽奖,抽中的人得到。为了公平起见,抽中的人根据当天的彩票号码或者其他号码进行算法处理,保证只能一个人中奖。

这个最大的问题就是属于博彩。

bug

今天出现一个问题

1
2
3
4
dyld: Symbol not found: _OBJC_CLASS_$_NSMutableURLRequest
Referenced from: /var/mobile/Applications/A730B070-0A0B-4345-9398-DA2C53DCC31D/scb.app/scb
Expected in: /System/Library/Frameworks/CFNetwork.framework/CFNetwork
in /var/mobile/Applications/A730B070-0A0B-4345-9398-DA2C53DCC31D/scb.app/scb

正好我升级了ios8 xcode的sdk也是ios8
照成这个原因是我用的smartlink已经在包里引用了CFNetwork.framework而我重复引用了。最后删掉就解决了
ps:奇怪的是我平时调试都没有出问题。今天拿到朋友手机就出现了。

freebsd 10.0安装

理由

下载

下载地址

找到64为的这个

  1. FreeBSD-10.0-RELEASE-amd64-bootonly.iso
  2. FreeBSD-10.0-RELEASE-amd64-disc1.iso
  3. FreeBSD-10.0-RELEASE-amd64-dvd1.iso
  4. FreeBSD-10.0-RELEASE-amd64-memstick.img

四个镜像文件

  1. 第一个FreeBSD-10.0-RELEASE-amd64-bootonly.iso是可以引导的光盘,只能引导系统,通常用于网络安装。基本没用。
  2. 第二个FreeBSD-10.0-RELEASE-amd64-disc1.iso是系统光盘的第一张。用这张就可以安装一个基本的系统。其他的软件,在系统安装完之后安装。
  3. 第三个FreeBSD-10.0-RELEASE-amd64-dvd1.iso是系统盘的DVD版本。包括的软件比上一个多一点。不过这些软件通过网络也可以安装。看你的网速了。快的话,没用必要用这个。
  4. 第四个FreeBSD-10.0-RELEASE-amd64-memstick.img个是U盘镜像。用相关工具写入U盘就行。
    还有一个是LiveCD。可以用它启动计算机进入系统。用来进行系统的演示,而不用进行硬盘的改动。当然了,也可以用它安装系统。

这里我选择第三个,因为我的网络不是太好.

怎样才能改变一个人

怎样才能改变一个人

  • 自然改变
  • 人为改变
  • 环境改变

到学校几天改变,比如一个人以前上课穿衬衫,但是学校要求必须裸体去上课,开始有一个人反对,这个人被退学了(或者主动离开了),忽然学生人群中有一个人带头脱掉上衣去上课。大家就都裸体了,随着时间的推移,大家就觉得这个很正常了,而看到别的学校都穿上衣上课就会感觉很鄙视,感觉别人是外星人。这个在军队,公司都是这样子吧,

宏:标准控制结构

引导

lisp和其他语言一样,有条件表达式,垃圾收集,但是lisp的宏系统却始终使他保持了在语言风格上的独特性。lisp的宏和任何语言的“宏”是不一样的。这个东西很难解释。

语言都有一个“核心”语言实现的标准功能库(java的JDK),如果某些功能没有定义在标准库中,可以自己实现。(求平凡实现列子)

。。。。。。

WHEN和UNLESS

最基本的条件执行形式是IF特殊操作符,其基本形式是:如果x成立,那么执行y,否则执行z。

(if condition then-form [else-form])

condition被求值,如果其值非NIL,那么then-form会被求值并返回其结果。否则,如果有else-form,他将被求值并返回其结果。如果condition是NIL并且没有else-form,那么IF返回NIL。(condition是判断条件,如果为nil就返回then-form的值,否则要是有else-form就返回else-form的值。如果只有condition并且值是nil就返回nil

1
2
3
4
5
6
CL-USER> (if (> 2 3) "YES" "no")
"no"
CL-USER> (if (> 2 3) "yes")
NIL
CL-USER> (if (> 3 2)"yes" "no")
"yes"

有一个情况不行,当条件成立,连续执行两个就不可以,因为会被当成else执行。要想在条件语句执行多个就必须使用progn特殊操作符。

1
2
3
4
(if (a)
(progn
(into)
(update)))

如上面,这样才会在a成立的时候执行into再执行update。

其lisp提供了一个标准宏WHEN 就是解决这个问题的。上面的可以写成这个样子

1
2
3
(when (a)
(into)
(update))

如果它没有被内置到标准库中,你也可以像下面这样用一个宏来定义WHEN

1
2
(defnacro when (condition &rest body)
`(if ,condition (progn ,@body)))

与WHEN宏同系列的另一个宏是UNLESS 它取相反条件,只有条件假的时候才求值其形式体。

1
2
(defnacro when (condition &rest body)
`(if (not ,condition) (progn ,@body)))

其实上面的定义不对,因为重新定义when所在的common-lisp包中的名字是非法的,如果非要这么做,可以修改名字,比如my-when

COND

1
2
3
4
5
(if a
(do-x)
(if b
(do-y)
(do-z)))

多重分支用if是可以,但是比较丑陋

如果子句再分很多就更丑了,但是lisp提供了一个用于表达多重分支条件的宏COND基本结构如下

1
2
3
4
5
6
7
(cond
(test-1 form*)
(test-2 form*)
.
.
.
(test-N form*))

AND、OR和NOT

循环

DOLIST和DOTIMES

DO

强大的LOOP