xref: /openbsd-src/gnu/llvm/clang/docs/analyzer/checkers/dealloc_example.m (revision e5dd70708596ae51455a0ffa086a00c5b29f8583)
1*e5dd7070Spatrick
2*e5dd7070Spatrick
3*e5dd7070Spatrick@interface MyObject : NSObject {
4*e5dd7070Spatrick  id _myproperty;
5*e5dd7070Spatrick}
6*e5dd7070Spatrick@end
7*e5dd7070Spatrick
8*e5dd7070Spatrick@implementation MyObject // warn: lacks 'dealloc'
9*e5dd7070Spatrick@end
10*e5dd7070Spatrick
11*e5dd7070Spatrick@interface MyObject : NSObject {}
12*e5dd7070Spatrick@property(assign) id myproperty;
13*e5dd7070Spatrick@end
14*e5dd7070Spatrick
15*e5dd7070Spatrick@implementation MyObject // warn: does not send 'dealloc' to super
16*e5dd7070Spatrick- (void)dealloc {
17*e5dd7070Spatrick  self.myproperty = 0;
18*e5dd7070Spatrick}
19*e5dd7070Spatrick@end
20*e5dd7070Spatrick
21*e5dd7070Spatrick@interface MyObject : NSObject {
22*e5dd7070Spatrick  id _myproperty;
23*e5dd7070Spatrick}
24*e5dd7070Spatrick@property(retain) id myproperty;
25*e5dd7070Spatrick@end
26*e5dd7070Spatrick
27*e5dd7070Spatrick@implementation MyObject
28*e5dd7070Spatrick@synthesize myproperty = _myproperty;
29*e5dd7070Spatrick  // warn: var was retained but wasn't released
30*e5dd7070Spatrick- (void)dealloc {
31*e5dd7070Spatrick  [super dealloc];
32*e5dd7070Spatrick}
33*e5dd7070Spatrick@end
34*e5dd7070Spatrick
35*e5dd7070Spatrick@interface MyObject : NSObject {
36*e5dd7070Spatrick  id _myproperty;
37*e5dd7070Spatrick}
38*e5dd7070Spatrick@property(assign) id myproperty;
39*e5dd7070Spatrick@end
40*e5dd7070Spatrick
41*e5dd7070Spatrick@implementation MyObject
42*e5dd7070Spatrick@synthesize myproperty = _myproperty;
43*e5dd7070Spatrick  // warn: var wasn't retained but was released
44*e5dd7070Spatrick- (void)dealloc {
45*e5dd7070Spatrick  [_myproperty release];
46*e5dd7070Spatrick  [super dealloc];
47*e5dd7070Spatrick}
48*e5dd7070Spatrick@end
49*e5dd7070Spatrick
50